在 json_encode 中編碼為 JSON 物件的稀疏數組
當數組包含缺失索引時,它被稱為稀疏數組。預設情況下,json_encode 將稀疏數組處理為 JSON 物件而不是數組。這可能會導致在各種情況下出現意外行為。
陣列到物件轉換的原因
JSON 語法不支援缺少索引的陣列。當 json_encode 遇到稀疏數組時,它會假設它是一個物件並進行相應的轉換。
範例
考慮以下程式碼:
$a = array( new stdClass, new stdClass, new stdClass ); $a[0]->abc = '123'; $a[1]->jkl = '234'; $a[2]->nmo = '567'; // First JSON encoding echo json_encode($a) . "\n"; // Unset an element unset($a[1]); // Second JSON encoding echo json_encode($a) . "\n";
輸出
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}] {"0":{"abc":"123"},"2":{"nmo":"567"}}
輸出
預防
防止此行為並確保數組編碼一致,您可以在將數組傳遞給 json_encode 之前使用 array_values() 重新索引數組。這將刪除數組中的任何漏洞,並確保 json_encode 將其視為數組。
echo json_encode(array_values($a)) . "\n";修改後的程式碼此修改後的程式碼將始終將 $a 編碼為一個 JSON 數組,無論它是否缺少索引。
以上是為什麼「json_encode」將稀疏 PHP 陣列轉換為 JSON 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!