Преобразовать 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
)
)
)