使用PHP将数据附加到JSON数组

时间:2014-09-18 15:41:43

标签: php arrays json

我需要使用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文件时的对象。

3 个答案:

答案 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);

上述代码的分步说明。

  1. 我们加载了文件的内容。在此阶段,它是一个包含JSON数据的字符串。

  2. 我们使用json_decode函数将字符串解码为一个关联的PHP数组。 这使我们可以修改数据。

  3. 我们向contentsDecoded变量添加了新内容。

  4. 我们使用json_encode将PHP数组编码回JSON字符串。

  5. 最后,我们通过用新创建的JSON字符串替换文件的旧内容来修改文件。