PHP从文件中读写JSON

时间:2012-01-13 23:55:48

标签: 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));

?>

这给了我一个致命的错误:不能在这一行使用stdClass类型的对象作为数组:

$json[$user] = array("first" => $first, "last" => $last);

我使用的是PHP5.2。有什么想法吗?谢谢!

7 个答案:

答案 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格式时,它必须采用这种格式才能阅读:

[ 
  {
    "":"",
    "":[
     {
       "":"",
       "":""
     }
    ]
  }
]