PHP从文件读取和写入JSON
我有一个文件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)); ?>
这给了我一个致命的错误:不能使用stdClasstypes的对象作为这一行上的数组:
$json[$user] = array("first" => $first, "last" => $last);
我正在使用PHP5.2。 有什么想法吗? 谢谢!
线索是在错误信息中 – 如果你看看json_decode
的文档,注意它可能需要第二个参数,它控制它是否返回一个数组或对象 – 它默认是object。
所以改变你的电话
$json = json_decode(file_get_contents($file), true);
它会返回一个关联数组,你的代码应该可以正常工作。
在PHP中读取和写入JSON的示例:
$json = json_decode(file_get_contents($file),TRUE); $json[$user] = array("first" => $first, "last" => $last); file_put_contents($file, json_encode($json));
或者只需使用$ json作为对象:
$json->$user = array("first" => $first, "last" => $last);
这是如何返回没有第二个参数(作为stdClass的一个实例)。
你需要通过传递true
参数来使解码函数返回一个数组。
json_decode(file_get_contents($file),true);
尝试使用json_decode函数的第二个参数:
$json = json_decode(file_get_contents($file), true);
这应该为你获得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);
如果您想要在定义良好的合成器中显示JSON数据,您可以将代码修改为:
file_put_contents($file, json_encode($json,TRUE)); $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); $str1=utf8_encode($str); $str1=json_decode($str1,true); foreach($str1 as $key=>$value) { echo "key is: $key.\n"; echo "values are: \t"; foreach ($value as $k) { echo " $k. \t"; # code... } echo "<br></br>"; echo "\n"; }
当你想创buildJSON格式时,必须使用以下格式来读取:
[ { "":"", "":[ { "":"", "":"" } ] } ]