@SteepNET

Дописать в файл json и прочесть его php?

Добрый день!
Немного запутался в JSON на PHP
Стоит задача записывать даныые в тектовый файл либо в json файл данные, но не просто записывать а дописывать новыми данными, свого рода бд. так на данный момент удобнее, понимаю что лучше использовать бд, но хочеться сперва использовать все таки файл.

Пробую так
$datetime = date("Y-m-d H:i:s");
$date = date("Y-m-d");
$time = date("H:i:s");

$array = [
	'Дата' => $datetime,
	'День' => $date,
	'Время' => $time, 
	];
$json = json_encode($array, JSON_UNESCAPED_UNICODE);

$filename = 'trunk_hook_json.json';
file_put_contents($filename,$json,FILE_APPEND | LOCK_EX);

echo $json;
exit();


Данные успешно записываються в файл
{"Дата":"2022-02-02 17:40:12","День":"2022-02-02","Время":"17:40:12"}

Если еще раз выполняю код то получается так
{"Дата":"2022-02-02 17:40:12","День":"2022-02-02","Время":"17:40:12"}{"Дата":"2022-02-02 17:40:12","День":"2022-02-02","Время":"17:40:12"}

Затем читаю таким образом
$Json = file_get_contents('trunk_hook_json.json');
$array = json_decode($Json);
var_dump($array);


Результат выводит если запись ф файле одна, если две то выводит null
Подскажите что не так делаю?
  • Вопрос задан
  • 1468 просмотров
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега PHP
Вместо
file_put_contents($filename,$json,FILE_APPEND | LOCK_EX);


... пишите так:
$payload = file_exists($filename) ? ",{$json}]" : "[{$json}]"; 
$fileHandler = fopen($filename, "c");
fseek($fileHandler, -1, SEEK_END);
fwrite($fileHandler, $payload);
fclose($fileHandler);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
Результат выводит если запись ф файле одна, если две то выводит null

Потому что
{"Дата":"2022-02-02 17:40:12","День":"2022-02-02","Время":"17:40:12"}{"Дата":"2022-02-02 17:40:12","День":"2022-02-02","Время":"17:40:12"}
это не валидный json. Валидный будет, например, такой:
[{"Дата":"2022-02-02 17:40:12","День":"2022-02-02","Время":"17:40:12"},{"Дата":"2022-02-02 17:40:12","День":"2022-02-02","Время":"17:40:12"}]
В любом случае, дозаписывать json неполучится. Либо обрабатывайте его полностью и полностью перезаписывайте файл. Либо храните в файле строками и читайте строками.
Ответ написан
Ваш ответ на вопрос

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

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