Как сохранять данные из формы в JSON файл?
С помощью скрипта ниже сохраняю в json файл post данные, сохраняет в таком виде:
Каждый раз при нажатии на кнопку Submit данные в json файле просто добавляются так:
[email protected]">[email protected]">[email protected]">
Как сделать, чтобы данные продолжали сохраняться в валидный json файл, по этому образцу:
[[email protected]">,[email protected]">]
$_POST['name'], 'email' => $_POST['email'] ); $json_string = json_encode($arr); file_put_contents($file, $json_string, FILE_APPEND); // echo $json_string; > ?> Form
Спасибо! UP. Добился нужного формата с помощью функций file_get_contents и str_replace но как-то криво это все (((
$_POST['name'], 'email' => $_POST['email'] ); $json_string = json_encode($arr); file_put_contents($file, '['.$json_string.']', FILE_APPEND); > // Если включены строгие типы, то есть объявлено (strict_types=1); $file = file_get_contents('data.json', true); $file = str_replace('][', ',', $file); echo $file; ?>
Как получить нужные данные из JSON?
отдают ошибку Fatal error: Uncaught Exception: There is no column «ware» in и atal error: Uncaught Error: Cannot use object of type MyItem as array in Помогите правильно запросить данные. Спасибо!
Отслеживать
задан 20 авг 2019 в 11:52
57 5 5 бронзовых знаков
Смотрите документацию или реализацию класса MyItem, как он предполагает отдавать данные.
20 авг 2019 в 11:56
Добавил class MyItem в вопрос.
20 авг 2019 в 12:00
Ошибку отдало Fatal error: Uncaught Exception: There is no column «data» in
20 авг 2019 в 12:12
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Как видно по var_dump , вы рассматриваете объект класса MyItem . Соответственно то что выводит var_dump может быть, а может и не быть способом достичь желаемые данные. Свойство data однозначно отмечено как protected и потому снаружи будет недоступно.
У класса MyItem есть два геттера: метод only и магический метод __get . Приключений добавляет то что на верхнем уровне вашего data — числовой массив. Поэтому обращаться к нему требуется именно как к числу. Синтаксически корректно это пишется так:
$obj = new MyItem([0=> ['title' => 'bar']]); var_dump($obj->['title']);
Либо через only достать весь элемент
var_dump($obj->only([0]));
Как изменить данные в JSON файле с помощью PHP?
Есть JSON файл вида: <"name" : "value1">. С помощью PHP я достаю значение value1 , каким-то образом изменяю (не суть важно) и хочу уже измененное значение value1_new запихнуть в JSON так, чтобы получился файл вида: <"name" : "value1_new">. То есть если было <"name" : "Ivan">, чтоб стало <"name" : "Vasiliy">после моих манипуляций. PHP:"name">
Я что-то никак не пойму, как это сделать, так что прошу помощи у соображающих коллег))
Отслеживать
Kirill Peace
задан 14 авг 2020 в 9:16
Kirill Peace Kirill Peace
112 10 10 бронзовых знаков
Вероятно после декодирования — json_decode, вам нужно изменить сначала $json[‘name’] = «Vasiluy», а после закодировать json_encode($json) и переписать файл
Как прочитать JSON средствами PHP?

Возможно вы знаете что данные в формате JSON (JavaScript Object Notation) могут храниться в виде файлов. Обычно они выглядят как — data.json . Фактически это текстовый файл содержащий данные и отформатированный в соответствии с правилами стандарта JSON в виде пары ключ-значение.
Пример JSON
Чтение файла средствами PHP
Для того чтобы прочитать данные в файле JSON существует функция file_get_content . В самом простом варианте достаточно передать в нее расположение файла JSON и сохранить данные в нужную нам переменную.
Давайте сделаем это и посмотрим что у нас получилось через var_dump :
$ourData = file_get_content("data.json"); var_dump($ourData);
В результате работы вышеописанного кода PHP прочитает данные из файла в переменную $ourData и затем выведет ее содержание:
// Код отформатирован для удобства отображения string(99) "< "name": "Super hero", "town": "Metro City", "formed": "2016", "location": "Super tower" >"
Как видим, данные из файла JSON сохранились в переменную и по сути представляют из себя строку — string
Работать с чистой строкой не особо удобно, поэтому к нам на помощь приходит функция json_decode применить которую можно в нескольких вариантах.
Преобразуем JSON в объект PHP
Вызов функции json_decode в простейшем варианте преобразит строку из файла JSON в PHP объект (Object)
// получаем данные из JSON файла $ourData = file_get_contents("data.json"); // Преобразуем в объект $object = json_decode($ourData); var_dump($object); // выводим объект
В результате мы получим объект PHP:
object(stdClass)#1 (4) < ["name"]=>string(10) "Super hero" ["town"]=> string(10) "Metro City" ["formed"]=> string(4) "2016" ["location"]=> string(11) "Super tower" >
И теперь мы можем обратиться к отдельным элементам объекта:
echo $object->name; // Выведет Super hero echo $object->location; // Выведет Super tower
Преобразуем JSON в массив PHP
Для преобразования в ассоциативный массив воспользуемся функцией json_decode с булевым параметром:
// получаем данные из JSON файла $ourData = file_get_contents("data.json"); // Преобразуем в массив $array = json_decode($ourData, true); var_dump($array); // выводим массив
PHP выведет на странице ассоциативный массив:
array(4) < ["name"]=>string(10) "Super hero" ["town"]=> string(10) "Metro City" ["formed"]=> string(4) "2016" ["location"]=> string(11) "Super tower" >
Это позволяет нам теперь обращаться к отдельным данным массива:
echo $array["town"]; // выведет Metro City
Дополнительные материалы:
В этом уроке мы использовали некоторые базовые функции PHP. Ниже ссылки на их документацию на официальном сайте PHP:
Хочешь стать по-настоящему крутым разработчиком — обучайся в Hexlet.
Статья обновлена 25/04/2021

Сергей Мочалов
Веб-разработчик. Создаю и поддерживаю сайты для клиентов с 2009 года
