Intereting Posts
Сглаживание многомерных массивов, объединяющих ключи Как указать SMTP-сервер в PHPMailer? Включите один файл PHP в другой Какова история с переменной $ variable-> в PHP? PHP – альфа сортирует строки из нескольких файлов в одном каталоге и сохраняет их в файлах с максимальными строками «x» в папках с именованными именами Не понимаю результат в XML-объектах и ​​PHP SimpleXMLElement тайм-аут сеанса из-за неактивности Каков наилучший способ остановить людей, взломавших таблицу рекордов на основе PHP в флеш-игре PHP SOAP Перенос файлов Как предотвратить добавление одного и того же продукта в корзину более одного раза в magento Удаление нежелательных заголовков из электронной почты (для безопасности) Тестирование фасадов Laravel с издевательством всегда проходит, даже если это не удается pecl install cassandra throws: "error: Не удалось загрузить libcassandra" функция создания часового пояса в веб-приложении PHP Как реализовать лицензирование в загружаемом приложении php

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. Есть предположения? Благодаря!

Подсказка находится в сообщении об ошибке – если вы посмотрите на документацию для 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-формат, он должен быть в этом формате, чтобы он читал:

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