为什么我的 JSON 数组变成了一个对象?
Why does my JSON array turn into an object?
我正在尝试取消 test_bots.json 中的一个值并将其保存回来,但不知何故数据格式在此过程中被更改。
test_bots.json 包含此 JSON 数组:
["John","Vladimir","Toni","Joshua","Jessica"]
我的代码如下所示:
$good = 'Toni';
$good_arr = file_get_contents('test_bots.json');
$good_arr = json_decode($good_arr);
if(in_array($good, $good_arr)){
$key = array_search($good, $good_arr);
unset($good_arr[$key]);
$good_arr2 = json_encode($good_arr);
file_put_contents('test_bots.json',$good_arr2);
}
保存的输出是:
{"0":"John","1":"Vladimir","3":"Joshua","4":"Jessica"}
但我希望输出看起来像:
["John","Vladimir","Joshua","Jessica"]
我试图在保存数组之前反序列化它,但它不起作用。
为什么会这样?
为了 json_encode
将带有数字键的 PHP 数组转换为 JSON 数组而不是 JSON 对象,键必须是连续的。 (参见 the PHP manual for json_encode
. 中的示例 #4)
您可以在代码中使用 array_values
完成此操作,这将在您删除其中一项后重新索引数组。
$good_arr2 = json_encode(array_values($good_arr));
我正在尝试取消 test_bots.json 中的一个值并将其保存回来,但不知何故数据格式在此过程中被更改。
test_bots.json 包含此 JSON 数组:
["John","Vladimir","Toni","Joshua","Jessica"]
我的代码如下所示:
$good = 'Toni';
$good_arr = file_get_contents('test_bots.json');
$good_arr = json_decode($good_arr);
if(in_array($good, $good_arr)){
$key = array_search($good, $good_arr);
unset($good_arr[$key]);
$good_arr2 = json_encode($good_arr);
file_put_contents('test_bots.json',$good_arr2);
}
保存的输出是:
{"0":"John","1":"Vladimir","3":"Joshua","4":"Jessica"}
但我希望输出看起来像:
["John","Vladimir","Joshua","Jessica"]
我试图在保存数组之前反序列化它,但它不起作用。
为什么会这样?
为了 json_encode
将带有数字键的 PHP 数组转换为 JSON 数组而不是 JSON 对象,键必须是连续的。 (参见 the PHP manual for json_encode
. 中的示例 #4)
您可以在代码中使用 array_values
完成此操作,这将在您删除其中一项后重新索引数组。
$good_arr2 = json_encode(array_values($good_arr));