如何在PHP中编辑文件的JSON?

如何在PHP中编辑文件的JSON?,php,arrays,json,file,object,Php,Arrays,Json,File,Object,我环顾四周,找到了函数file_get_contents和file_put_contents,并尝试编写一个基本代码,将代码中[0]['Face']的名称更改为“Testing Face”,但它完全覆盖了JSON 这是我在PHP代码之前的JSON: [{"Hat":{"Name":"Stylin' Shades","Id":"221177193"},{"Gear":{"Name":"Red Sparkle Time Claymore", "Id":"221181437"}}, {"Face":{

我环顾四周,找到了函数file_get_contents和file_put_contents,并尝试编写一个基本代码,将代码中[0]['Face']的名称更改为“Testing Face”,但它完全覆盖了JSON

这是我在PHP代码之前的JSON:

[{"Hat":{"Name":"Stylin' Shades","Id":"221177193"},{"Gear":{"Name":"Red Sparkle Time Claymore", "Id":"221181437"}}, {"Face":{"Name":"Joyful Smile", "Id":"209995366"}]
应该改成

[{"Hat":{"Name":"Stylin' Shades","Id":"221177193"},{"Gear":{"Name":"Red Sparkle Time Claymore", "Id":"221181437"}}, {"Face":{"Name":"Testing Face", "Id":"209995366"}]
但是,整个JSON被替换为[{Face:{Name:No}]

我的PHP:

<?php
$file = 'notifier.json';
$jsonString = file_get_contents($file);
$data = json_decode($jsonString);
$data[0]['Face']['Name'] = 'Testing Face';
$newJSON = json_encode($data);
file_put_contents($file, $newJSON);
?>

谢谢

您的JSON有语法错误。具体而言:

...,{"Gear":{"Name":"Red Sparkle Time Claymore", "Id":"221181437"}}, {"...
您必须拆下第一对环绕齿轮的花括号。最后一个没有朋友

固定JSON:

[{"Hat":{"Name":"Stylin' Shades","Id":"221177193"},"Gear":{"Name":"Red Sparkle Time Claymore", "Id":"221181437"}, "Face":{"Name":"Joyful Smile", "Id":"209995366"}}]
接下来,需要使用json_decode的第二个参数将返回的对象转换为关联数组:


阅读更多。请参阅$assoc参数。

您的JSON有语法错误。具体而言:

...,{"Gear":{"Name":"Red Sparkle Time Claymore", "Id":"221181437"}}, {"...
您必须拆下第一对环绕齿轮的花括号。最后一个没有朋友

固定JSON:

[{"Hat":{"Name":"Stylin' Shades","Id":"221177193"},"Gear":{"Name":"Red Sparkle Time Claymore", "Id":"221181437"}, "Face":{"Name":"Joyful Smile", "Id":"209995366"}}]
接下来,需要使用json_decode的第二个参数将返回的对象转换为关联数组:

阅读更多。请参阅$assoc参数。

将json_decode的第二个参数添加为true。如果为true,返回的对象将转换为关联数组

请阅读以下内容:

将json_decode的第二个参数添加为true。如果为true,则返回的对象将转换为关联数组

请阅读以下内容:


他将stdClass转换为json_解码中的数组,这解决了我的问题。谢谢他在json_decode中设置了一个可选参数,该参数决定所有对象都应该被解码为关联数组。它允许$data[0]['Face']['Name']工作。但是,这是没有必要的,您可以简单地使用$data[0]->Face->Name='Testing Face',这在我看来也更干净。但这不是问题,AJAX有一个错误,这就是为什么它一开始没有被解码。他将stdClass转换为json_decode中的数组,这解决了我的问题。谢谢他在json_decode中设置了一个可选参数,该参数决定所有对象都应该被解码为关联数组。它允许$data[0]['Face']['Name']工作。但是,这是没有必要的,您可以简单地使用$data[0]->Face->Name='Testing Face',而这在我看来也更干净。但这不是问题所在,AJAX有一个错误,这就是为什么它一开始没有被解码的原因。