Подтвердить что ты не робот

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

4b9b3361

Ответ 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, он должен быть в этом формате для чтения:

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