У меня есть следующий JSON в файле list.txt
:
{ "bgates":{"first":"Bill","last":"Gates"}, "sjobs":{"first":"Steve","last":"Jobs"} }
Как добавить "bross":{"first":"Bob","last":"Ross"}
в файл с помощью PHP?
Вот что я до сих пор:
<?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)); ?>
Что дает мне Fatal error: нельзя использовать объект типа stdClass в качестве массива в этой строке:
$json[$user] = array("first" => $first, "last" => $last);
Я использую PHP5.2. Есть предположения? Благодаря!
Подсказка находится в сообщении об ошибке – если вы посмотрите на документацию для json_decode
обратите внимание, что она может принимать второй параметр, который контролирует, возвращает ли он массив или объект – по умолчанию он относится к объекту.
Поэтому измените свой призыв на
$json = json_decode(file_get_contents($file), true);
И он вернет ассоциативный массив, и ваш код будет работать нормально.
Образец для чтения и записи JSON в PHP:
$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 в четко определенном formate, вы можете изменить код следующим образом:
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"; }
Когда вы хотите создать json-формат, он должен быть в этом формате, чтобы он читал:
[ { "":"", "":[ { "":"", "":"" } ] } ]