我在文件list.txt
中有以下JSON:
{
"bgates":{"first":"Bill","last":"Gates"},
"sjobs":{"first":"Steve","last":"Jobs"}
}
如何使用PHP将"bross":{"first":"Bob","last":"Ross"}
添加到我的文件中?
这是我到目前为止所拥有的:
<?php
$user = "bross";
$first = "Bob";
$last = "Ross";
$file = "list.txt";
$json = json_decode(file_get_contents($file));
$json[$user] = array("first" => $first, "last" => $last);
file_put_contents($file, json_encode($json));
?>
这给了我一个致命的错误:不能在这一行使用stdClass类型的对象作为数组:
$json[$user] = array("first" => $first, "last" => $last);
我使用的是PHP5.2。有什么想法吗?谢谢!
答案 0 :(得分:80)
线索在错误消息中 - 如果你查看json_decode
的文档,请注意它可能需要第二个参数,它控制它是返回一个数组还是一个对象 - 它默认为object。
请将您的电话改为
$json = json_decode(file_get_contents($file), true);
它将返回一个关联数组,你的代码应该可以正常工作。
答案 1 :(得分:21)
用于在PHP中读写JSON的示例:
$json = json_decode(file_get_contents($file),TRUE);
$json[$user] = array("first" => $first, "last" => $last);
file_put_contents($file, json_encode($json));
答案 2 :(得分:8)
或者只使用$ json作为对象:
$json->$user = array("first" => $first, "last" => $last);
这是没有第二个参数(作为stdClass的实例)返回的方式。
答案 3 :(得分:7)
您需要通过传入true
参数使解码函数返回一个数组。
json_decode(file_get_contents($file),true);
答案 4 :(得分:3)
尝试将第二个参数用于json_decode函数:
$json = json_decode(file_get_contents($file), true);
答案 5 :(得分:3)
这应该可以帮助您获取list.txt
文件
$headers = array('http'=>array('method'=>'GET','header'=>'Content: type=application/json \r\n'.'$agent \r\n'.'$hash'));
$context=stream_context_create($headers);
$str = file_get_contents("list.txt",FILE_USE_INCLUDE_PATH,$context);
$str=utf8_encode($str);
$str=json_decode($str,true);
print_r($str);
答案 6 :(得分:1)
当你想创建json格式时,它必须采用这种格式才能阅读:
[
{
"":"",
"":[
{
"":"",
"":""
}
]
}
]