我需要使用PHP将新对象附加到JSON数组。
JSON:
{
"maxSize":"3000",
"thumbSize":"800",
"loginHistory":[
{
"time": "1411053987",
"location":"example-city"
},
{
"time": "1411053988",
"location":"example-city-2"
}
]}
到目前为止的PHP:
$accountData = json_decode(file_get_contents("data.json"));
$newLoginHistory['time'] = "1411053989";
$newLoginHistory['location'] = "example-city-3";
array_push($accountData['loginHistory'],$newLoginHistory);
file_put_contents("data.json", json_encode($accountData));
我一直在' null'作为" loginHistory"的输出保存JSON文件时的对象。
答案 0 :(得分:2)
问题是json_decode默认情况下不返回数组,你必须启用它。看这里: Cannot use object of type stdClass as array?
无论如何,只需在第一行添加一个参数就可以了:
$accountData = json_decode(file_get_contents("data.json"), true);
$newLoginHistory['time'] = "1411053989";
$newLoginHistory['location'] = "example-city-3";
array_push($accountData['loginHistory'],$newLoginHistory);
file_put_contents("data.json", json_encode($accountData));
如果您启用了PHP错误/警告,您会看到如下所示:
致命错误:无法在test.php中使用stdClass类型的对象作为数组 在第6行
答案 1 :(得分:1)
$accountData
是一个对象,应该是它。数组访问无效:
array_push($accountData->loginHistory, $newLoginHistory);
// or simply
$accountData->loginHistory[] = $newLoginHistory;
答案 2 :(得分:1)
这是有关如何使用PHP修改JSON文件的小型简单指南。
//Load the file
$contents = file_get_contents('data.json');
//Decode the JSON data into a PHP array.
$contentsDecoded = json_decode($contents, true);
//Create a new History Content.
$newContent = [
'time'=> "1411053989",
'location'=> "example-city-3";
]
//Add the new content data.
$contentsDecoded['loginHistory'][] = $newContent;
//Encode the array back into a JSON string.
$json = json_encode($contentsDecoded);
//Save the file.
file_put_contents('data.json', $json);
上述代码的分步说明。
我们加载了文件的内容。在此阶段,它是一个包含JSON数据的字符串。
我们使用json_decode函数将字符串解码为一个关联的PHP数组。 这使我们可以修改数据。
我们向contentsDecoded变量添加了新内容。
我们使用json_encode将PHP数组编码回JSON字符串。
最后,我们通过用新创建的JSON字符串替换文件的旧内容来修改文件。