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

        )

)

Добавить комментарий

Ваш адрес email не будет опубликован.