在 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 数组。但是,在取消设置索引 1 后,由于稀疏数组问题,第二次编码会生成 JSON 对象。
预防
防止此行为并确保数组编码一致,您可以在将数组传递给 json_encode 之前使用 array_values() 重新索引数组。这将删除数组中的任何漏洞,并确保 json_encode 将其视为数组。
修改后的代码
echo json_encode(array_values($a)) . "\n";
此修改后的代码将始终将 $a 编码为一个 JSON 数组,无论它是否缺少索引。
以上是为什么'json_encode”将稀疏 PHP 数组转换为 JSON 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!