“致命错误:未捕获错误:将数据追加到json有效负载时,无法将stdClass类型的对象用作数组“”[重复]

b4qexyjb  于 2023-04-13  发布在  其他
关注(0)|答案(3)|浏览(150)

此问题已在此处有答案

Use json_decode() to create array insead of an object(12个回答)
6小时前关闭
我需要使用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));

我一直收到:
致命错误:未捕获错误:无法将stdClass类型的对象用作数组
null作为保存JSON文件时“loginHistory”对象的输出。

b09cbbtk

b09cbbtk1#

问题是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错误/警告,你会看到这样的:
致命错误:Cannot use object of type stdClass as array in test.php on line 6

qybjjes1

qybjjes12#

$accountData是一个对象,因为它应该是。数组访问无效:

array_push($accountData->loginHistory, $newLoginHistory);
// or simply
$accountData->loginHistory[] = $newLoginHistory;
laawzig2

laawzig23#

这是一个关于如何使用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数据的字符串。
1.我们使用函数json_decode将字符串解码为关联PHP数组。这允许我们修改数据。
1.我们向contentsDecoded变量添加了新内容。
1.我们使用json_encode将PHP数组编码回JSON字符串。
1.最后,我们修改了文件,用新创建的JSON字符串替换了文件的旧内容。

相关问题