Millerish
@Millerish

PHP как правильно работать с JSON?

Добрый вечер!

Мне нужно прочитать файл, разобрать его на массив, дописать строку и записать снова json. Как правильно это сделать?

Я пробую так, но ничего не выходит:
$file = file_get_contents('json.txt', true);
$name = "name";
$email = "email";
if(isset($file)){
    $arr = array();
}
$arr[count($arr)+1]["name"] = $name;
$arr[count($arr)]["email"] = $email;
echo json_encode($arr);
$decode = json_decode($file ,true);
$fp = fopen("json.txt", "w");
fwrite($fp, json_encode($arr) );
fclose ($fp);


На выходе нужно получить:

{"1":{"name":"name","email":"email1"}, "2":{"name":"name","email":"email1"}}


Как правильно?
  • Вопрос задан
  • 1743 просмотра
Пригласить эксперта
Ответы на вопрос 1
@a_ovchinnikov
Web developer
Дело в том, что сейчас вы просто записываете в файл содержимое переменной $arr, которая всегда будет одинаковой, независимо от содержимого файла:

fwrite($fp, json_encode($arr) );

Правильный алгоритм таков:

1. Получили содержимое файла;
2. С помощью функции json_decode сделали из содержимого ассоциативный массив;
3. Дописали новые данные в конец этого массива;
4. С помощью функции json_encode из массива снова получили JSON-строку;
5. Записали результат в файл.

В целом структура вашего кода очень похожа на то, что я описал. Вероятно, ошибка вот где:

if(isset($file)){
$arr = array();
}
$arr[count($arr)+1]["name"] = $name;
$arr[count($arr)]["email"] = $email;
echo json_encode($arr);


Вы создали пустой массив, а надо было проинициализировать его данными из файла. Также конструкция echo здесь ни к чему, если конечно только вы не используете ее в тестовых целях.

Кстати, еще один лайфхак - вставку значения в конец массива можно сделать чуть проще:

$arr[] = [
    'name' => $name,
    'email' => $email
];


Оператор [] позволяет положить значение в конец массива. В данном случае мы кладем ассоциативный массив.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы