Преобразовать JSON в массив PHP
При построение веб сервисов, особенно с применением Ajax, часто от javascript в PHP данные приходят в формате JSON. Чтобы работать с данными, как с массивом, есть специальная функция, json_decode.
json_decode( string $json, ?bool $associative = null, int $depth = 512, int $flags = 0 ): mixed
Список параметров:
- json — Строка (string) json для декодирования. Эта функция работает только со строками в кодировке UTF-8.
- associative Если true, объекты JSON будут возвращены как ассоциативные массивы (array); если false, объекты JSON будут возвращены как объекты (object). Если null, объекты JSON будут возвращены как ассоциативные массивы (array) или объекты (object) в зависимости от того, установлена ли JSON_OBJECT_AS_ARRAY в flags.
- depth — Максимальная глубина вложенности структуры, для которой будет производиться декодирование.
- flags — Битовая маска из констант JSON_BIGINT_AS_STRING, JSON_INVALID_UTF8_IGNORE, JSON_INVALID_UTF8_SUBSTITUTE, JSON_OBJECT_AS_ARRAY, JSON_THROW_ON_ERROR.
Для самого простого использования необходимо передать в функцию строку в формате JSON, ниже приведен пример и результат его выполнения.
<?php $json = '{'Сущность': 'Человек','Возраст': 33,'Родной город':'Москва','Профессия':'Журналист','Другой параметр':{'Вложенное свойство Уровень 1':'Вложенное значение Уровень 1','Параметр':{'Вложенное свойство Уровень 2':'Вложенное значение Уровень 2'}}}'; $obj = json_decode($json); echo '<pre>'; print_r($obj); echo '</pre>'; ?>
Результат:
stdClass Object ( [Сущность] => Человек [Возраст] => 33 [Родной город] => Москва [Профессия] => Журналист [Другой параметр] => stdClass Object ( [Вложенное свойство Уровень 1] => Вложенное значение Уровень 1 [Параметр] => stdClass Object ( [Вложенное свойство Уровень 2] => Вложенное значение Уровень 2 ) ) )
В данном случае мы получили stdClass Object. Можно обращаться как к свойствам объекта, через ->.
Чтобы получить в результате ассоциативный массив, необходимо в функцию json_decode вторым параметром передать true, пример и результат:
<?php $json = '{'Сущность': 'Человек','Возраст': 33,'Родной город':'Москва','Профессия':'Журналист','Другой параметр':{'Вложенное свойство Уровень 1':'Вложенное значение Уровень 1','Параметр':{'Вложенное свойство Уровень 2':'Вложенное значение Уровень 2'}}}'; $obj = json_decode($json,true); echo '<pre>'; print_r($obj); echo '</pre>'; ?>
Результат:
Array ( [Сущность] => Человек [Возраст] => 33 [Родной город] => Москва [Профессия] => Журналист [Другой параметр] => Array ( [Вложенное свойство Уровень 1] => Вложенное значение Уровень 1 [Параметр] => Array ( [Вложенное свойство Уровень 2] => Вложенное значение Уровень 2 ) ) )