一,什么是json

json是一種數(shù)據(jù)結(jié)構(gòu),易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。

json建構(gòu)兩種結(jié)構(gòu):

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


json具有以下這些形式:

對(duì)象是一個(gè)無(wú)序的“‘名稱(chēng)/值’對(duì)”集合。一個(gè)對(duì)象以“{”(左括號(hào))開(kāi)始,“}”(右括號(hào))結(jié)束。每個(gè)“名稱(chēng)”后跟一個(gè)“:”(冒號(hào));“‘名稱(chēng) /值’ 對(duì)”之間使用“,”(逗號(hào))分隔。


二,我遇到的問(wèn)題
看下面的例子:
  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ù),轉(zhuǎn)換成"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. ?>
復(fù)制代碼



操作和分析:

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

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

3,即使像016500這樣的數(shù)據(jù)沒(méi)有加上雙引號(hào),我想json_decode也可以做出準(zhǔn)確的判斷,因?yàn)檫@個(gè)邏輯不復(fù)雜,所以我想json_decode是不是應(yīng)當(dāng)改進(jìn)一下,還有我用php版本是5.2.3,不知道最新的版本有沒(méi)有修正這個(gè)bug