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)題
看下面的例子:
- <?php
- $string = '{"skus" : [
- {
- "SHADENAME" : null,
- "HEX_VALUE_STRING" : "",
- "SKU_BASE_ID" : 5912,
- "pricePlusTax" : 8400,
- "PRODUCT_SIZE" : "220g",
- "PRICE" : 8000,
- "SKU_ID" : "SKU5912",
- "INVENTORY_STATUS" : 2,
- "PRODUCT_CODE" : 016500
- }
- ],
- "shaded" : 0,
- "PROD_CAT_IMAGE_NAME" : 0165,
- "SKINTYPE_DESC" : "",
- "PRODUCT_ID" : "PROD2158"
- }
- ';
- //下面的正則是把0615這樣數(shù)據(jù),轉(zhuǎn)換成"0615"
- $pattern = "/:(\s*)0(\d+)/ui";
- $replacement = ':\\1"0\\2"';
- $string = preg_replace($pattern, $replacement, $string);
- $result = json_decode($string, true);
- print_r($result);
- $string = json_encode($result);
- echo $string;
- ?>
操作和分析:
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