理解稀疏數組的 JSON 編碼
在 JSON 編碼中,稀疏數組(缺少索引值的數組)是一種異常現象。這是因為 JSON 的陣列語法不支援索引,無法直接表示這類陣列。
問題:
為什麼 json_encode 將稀疏數組編碼為 JSON物件而不是數組?
答案:
稀疏數組的 json_encode 行為源自於 JSON 無法表達此類數組。當 json_encode 遇到稀疏數組時,它會將其編碼為 JSON 物件來維護數組的鍵值對。
範例:
考慮PHP程式碼:
$a = array( new stdclass, new stdclass, new stdclass ); $a[0]->abc = '123'; $a[1]->jkl = '234'; $a[2]->nmo = '567'; echo json_encode($a) . "\n"; unset($a[1]); echo json_encode($a) . "\n";
輸出:
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}] {"0":{"abc":"123"},"2":{"nmo":"567"}}
解釋:
取消索引 1 後,稀疏數組中出現了一個空洞,這會強制 json_encode 將其轉換為 JSON 對象,以維持鍵和值之間的關聯。
解:要防止將稀疏數組編碼為對象,可以使用array_values($a) 取得沒有任何漏洞的重新索引數組。然後 json_encode 會將其正確編碼為 JSON 陣列。以上是為什麼「json_encode」將稀疏數組轉換為 JSON 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!