为啥我的 JSON 数组会变成一个对象?
Posted
技术标签:
【中文标题】为啥我的 JSON 数组会变成一个对象?【英文标题】:Why does my JSON array turn into an object?为什么我的 JSON 数组会变成一个对象? 【发布时间】:2017-05-13 06:51:53 【问题描述】:我正在尝试从 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"]
我尝试在保存数组之前对其进行反序列化,但它不起作用。
为什么会这样?
【问题讨论】:
将$good_arr
中的file_put_contents
更改为$good_arr2
。
看起来只是一个错字。正如@jardis 指出的那样,您没有将刚刚使用json_encode
创建的变量保存到文件中,而是保存了未编码的数组。
抱歉打错了。我编辑了我的问题。 @不要惊慌
这里的罪魁祸首是array_search()
【参考方案1】:
为了让json_encode
将带有数字键的 php 数组转换为 JSON 数组而不是 JSON 对象,键必须是连续的。 (参见the PHP manual for json_encode
. 中的示例#4)
您可以在代码中使用array_values
完成此操作,这将在您删除其中一项后重新索引数组。
$good_arr2 = json_encode(array_values($good_arr));
【讨论】:
以上是关于为啥我的 JSON 数组会变成一个对象?的主要内容,如果未能解决你的问题,请参考以下文章