讓兩個小測試開始:爲什麼PHP函數「json_encode」應用於第一個元素缺失的非關聯數組會將第二個關鍵字視爲字符串?
$original = [0 => 'a', 1 => 'b'];
var_dump((json_decode(json_encode($original))));
回報
array(2) { // array
[0]=> // integer like original
string(1) "a"
[1]=> // integer like original
string(1) "b"
}
所以我們可以在這裏看到,該assoc
參數(在json_decode
函數的第二個參數)未設置(默認爲false
),並且配對json_decode-json_encode
恢復原來的樣子。
$original = [1 => 'a', 2 => 'b'];
var_dump((json_decode(json_encode($original))));
回報
object(stdClass)#1 (2) { // object
["1"]=> // string, instead of integer
string(1) "a"
["2"]=> // string, instead of integer
string(1) "b"
}
在這裏,assoc
爲false
,但除非我們明確設定assoc
到true
對json_decode-json_encode
無法恢復原來的。
問:我上的自定義序列化過程(從PHP serialize
和unserialize
功能不同的)工作。我決定使用json_decode-json_encode
對,我發現我不能依靠默認設置,如assoc=false
。您是否知道json_
家族功能有任何其他缺陷,當我無法恢復原始數據和結構時,可能會導致出現問題?
那麼,他們可以在編碼上執行'JSON_NUMERIC_CHECK'。 –
隻影響值,而不是鍵。 – Barmar
謝謝。那麼,這個問題我們有3個選項(一個有3個元素的數組)存儲爲JSON編碼的字符串。後來我們決定擺脫第一種選擇,所以我們解碼了字符串 - >刪除[0]元素 - >編碼了字符串,然後在數組變成對象時遇到了這個問題。 – Axalix