一,什么是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具有以下這些形式:
對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”后跟一個“:”(冒號);“‘名稱 /值’ 對”之間使用“,”(逗號)分隔。
二,我遇到的問題
看下面的例子:
- <?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ù),轉換成"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);根本顯示不了任何東西,問題就出在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