PHP читает и записывает JSON из файла
У меня есть следующий 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. Есть предположения? Спасибо!
Ответы
Ответ 1
Ключ находится в сообщении об ошибке - если вы посмотрите на документацию для json_decode
, обратите внимание, что он может принимать второй параметр, который контролирует, возвращает ли он массив или объект - по умолчанию используется объект.
Итак, измените свой вызов на
$json = json_decode(file_get_contents($file), true);
И он вернет ассоциативный массив, и ваш код будет работать нормально.
Ответ 2
Образец для чтения и записи JSON в PHP:
$json = json_decode(file_get_contents($file),TRUE);
$json[$user] = array("first" => $first, "last" => $last);
file_put_contents($file, json_encode($json));
Ответ 3
Или просто используйте $json как объект:
$json->$user = array("first" => $first, "last" => $last);
Вот как он возвращается без второго параметра (в качестве примера stdClass).
Ответ 4
Вам нужно заставить функцию декодирования вернуть массив, передав параметр true
.
json_decode(file_get_contents($file),true);
Ответ 5
Попробуйте использовать второй параметр для функции json_decode:
$json = json_decode(file_get_contents($file), true);
Ответ 6
Это должно работать для вас, чтобы получить содержимое файла 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);
Ответ 7
Если вы хотите отображать данные 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";
}
Ответ 8
Если вы хотите создать формат json, он должен быть в этом формате для чтения:
[
{
"":"",
"":[
{
"":"",
"":""
}
]
}
]