首頁  >  文章  >  後端開發  >  為什麼「json_encode」將稀疏數組轉換為 JSON 物件?

為什麼「json_encode」將稀疏數組轉換為 JSON 物件?

Susan Sarandon
Susan Sarandon原創
2024-11-25 08:55:12763瀏覽

Why Does `json_encode` Convert Sparse Arrays to JSON Objects?

理解稀疏數組的 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"}}

解釋:

  • 解釋:
在第一個編碼中,稀疏數組表示為有效的JSON數組,其中包含三個

取消索引 1 後,稀疏數組中出現了一個空洞,這會強制 json_encode 將其轉換為 JSON 對象,以維持鍵和值之間的關聯。

解:要防止將稀疏數組編碼為對象,可以使用array_values($a) 取得沒有任何漏洞的重新索引數組。然後 json_encode 會將其正確編碼為 JSON 陣列。

以上是為什麼「json_encode」將稀疏數組轉換為 JSON 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn