首頁 > 後端開發 > php教程 > 為什麼「json_encode」將稀疏 PHP 陣列轉換為 JSON 物件?

為什麼「json_encode」將稀疏 PHP 陣列轉換為 JSON 物件?

Mary-Kate Olsen
發布: 2024-11-21 07:53:08
原創
726 人瀏覽過

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

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板