一,什么是json

json是一種數(shù)據(jù)結構,易于人閱讀和編寫,同時也易于機器解析和生成。

json建構兩種結構:

1,“名稱/值”成對的集合,不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯(lián)數(shù)組 (associative array)。
2,值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數(shù)組(array)。


json具有以下這些形式:

對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”后跟一個“:”(冒號);“‘名稱 /值’ 對”之間使用“,”(逗號)分隔。


二,我遇到的問題
看下面的例子:
  1. <?php
  2. $string = '{"skus" : [
  3.                      {
  4.                         "SHADENAME" : null,
  5.                         "HEX_VALUE_STRING" : "",
  6.                         "SKU_BASE_ID" : 5912,
  7.                         "pricePlusTax" : 8400,
  8.                         "PRODUCT_SIZE" : "220g",
  9.                         "PRICE" : 8000,
  10.                         "SKU_ID" : "SKU5912",
  11.                         "INVENTORY_STATUS" : 2,
  12.                         "PRODUCT_CODE" : 016500
  13.                      }
  14.                   ],
  15.                 "shaded" : 0,
  16.                 "PROD_CAT_IMAGE_NAME" : 0165,
  17.                 "SKINTYPE_DESC" : "",
  18.                 "PRODUCT_ID" : "PROD2158"
  19.              }
  20. ';

  21. //下面的正則是把0615這樣數(shù)據(jù),轉換成"0615"
  22. $pattern = "/:(\s*)0(\d+)/ui";
  23. $replacement = ':\\1"0\\2"';
  24. $string = preg_replace($pattern, $replacement, $string);

  25. $result = json_decode($string, true);
  26. print_r($result);

  27. $string = json_encode($result);
  28. echo $string;
  29. ?>
復制代碼



操作和分析:

1,如果我把正則的東西拿掉的話,print_r($result);根本顯示不了任何東西,問題就出在016500這樣的數(shù)據(jù)上,他搞不清楚,這樣的數(shù)據(jù)到底是字符串類型,還是數(shù)值類型。加上雙引號就好了。

2,我把數(shù)組又重新$string = json_encode($result);并把json字符串打印出來,發(fā)現(xiàn)在json_encode會把016500加上雙引號,由此可以斷定,php代碼中的那段json字符串是手動生成的。

3,即使像016500這樣的數(shù)據(jù)沒有加上雙引號,我想json_decode也可以做出準確的判斷,因為這個邏輯不復雜,所以我想json_decode是不是應當改進一下,還有我用php版本是5.2.3,不知道最新的版本有沒有修正這個bug