Работа PHP с JSON. Добавление, удаление и обновление в файле

В этой статье я хочу рассказать о работе с массивом в  формате JSON. Я опущу описание функций json_decode и json_encode, хотя в примерах буду их использовать. Цель статьи: продемонстрировать простоту работы с файлом в формате  .json

Основной принцип работы php с json - декодирование или кодирование данных, где данные представлены как массив. В итоге всё сводится к перебору массива и записи новых данных в файл.  

Приведу несколько примеров, как можно добавить или обновить json файл. 

Добавление:

$file = file_get_contents('php/data.json');  // Открыть файл data.json
          
$taskList = json_decode($file,TRUE);        // Декодировать в массив 
                        
unset($file);                               // Очистить переменную $file
           
$taskList[] = array('name'=>$name);        // Представить новую переменную как элемент массива, в формате 'ключ'=>'имя переменной'
          
file_put_contents('php/data.json',json_encode($taskList));  // Перекодировать в формат и записать в файл.
          
unset($taskList);     

Где: data.json  - имя файла, $name - имя переменной, которую необходимо добавить в файл.

Удаление:

  $file = file_get_contents('php/data.json');         // Открыть файл data.json

$taskList=json_decode($file,TRUE);                  // Декодировать в массив 

   foreach ( $taskList  as $key => $value){        // Найти в массиве  

      if (in_array( $current, $value)) {           // Переменную $current

                unset($taskList[$key]);             // после обнаружения удалить
          }
      } 

file_put_contents('php/data.json',json_encode($taskList)); // Перекодировать в формат и записать в файл.

unset($taskList);                           // Очистить переменную $taskList 

file_put_contents('php/data.json',json_encode($taskList)); // Перекодировать в формат и записать в файл.

unset($taskList);     

Где переменная $current  представлена в виде значения, без ключа.

Обновление:

$oldname = trim($oldname);               // Имя переменной которую нужно обновить

$newname = trim($name);                // Имя переменной которой обновим старое значение

$file = file_get_contents('php/data.json');     // Открыть файл data.json

$taskList=json_decode($file,TRUE);              // Декодировать в массив 

    foreach ( $taskList  as $key => $value){    // Найти в массиве  

       if (in_array( $oldname, $value)) {    // Совпадение значения переменной

          $taskList[$key]  = array('name'=>$newname);  // Присвоить новое значение
      }
   } 

file_put_contents('php/data.json',json_encode($taskList)); // Перекодировать в формат и записать в файл.

unset($taskList);  // Очистить переменную $taskList 

 

Я подробно прокомментировал каждую строку, думаю, это поможет  вам разобраться как происходит добавление, удаление и обновление данных в формате JSON.

Удачи в кодировании!!

Александр 04 июня, 2016

Большое спасибо администратору сайта, 2 дня потратил с попытками добавления все тщетно, пока не наткнулся на этот блог.! #мир_всем

instocky 20 ноября, 2017

красиво и с комментариями по каждой строке. Благодарочка)
занимаюсь тем же что и автор, нужна помощь - стучите в скайп или телегу @instocky

Костя 10 августа, 2018

Спасибо огромное!
Всё по полкам разложил!

Lacmus 23 августа, 2018

Ну да, ну да, а как быть когда данные получаются из базы по разным таблицам и сумма данных для записи в json 800mb+

alex7678678 28 августа, 2018

не корректно использована in_array()

Алексей 10 октября, 2018

Большое спасибо!

Dmitriy 31 октября, 2018

Здраствуйте.Скажите пожалуйста данные записываются null.Как исправить?

AlexSay 06 декабря, 2018

На мой взгляд если требуется часто писать в файл, ну к примеру я использую для хранения кэша, то лучше всего писать в файл в конце выполнения скрипта, но приложение должно быть спроектировано так что бы никакие ошибки не могу повлиять на такую работу, это не касается современных фреймворком, но у меня исторический проект, который мы будем переносить на laravel, но до это момента еще года 2, так что не забывайте о нагрузке)

rardsmoom 10 декабря, 2019

i am from Italy hello. Can you help me translate? /rardor

Игорь 09 июня, 2020

Спасибо огромное за статью!

Сергей 15 июня, 2020

Спасибо большое! Отличный блог!

Оставить комментарий

Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.

Похожие материалы