Декодирует строку JSON

# json_decode

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)

json_decode — Декодирует строку JSON

### Описание

function json_decode(
string `$json`,
?bool `$associative` = `null`,
int `$depth` = 512,
int `$flags` = 0
): mixed

Принимает закодированную в JSON строку и преобразовывает её в PHP-значение.

### Список параметров

`json`

  Строка (string) `json` для декодирования.

  Функция работает только со строками в кодировке UTF-8.

  > Замечание: PHP реализует расширенный набор JSON, который описывает исходный стандарт » RFC 7159.

`associative`

  Если `true`, объекты JSON будут возвращены как ассоциативные массивы (array); если `false`, объекты JSON будут возвращены как объекты (object). Если `null`, объекты JSON будут возвращены как ассоциативные массивы (array) или объекты (object) в зависимости от того, установлена ли `JSON_OBJECT_AS_ARRAY` в `flags`.

`depth`

  Максимальная глубина вложенности структуры, для которой будет производиться декодирование. Значение должно быть больше `0` и меньше или равно `2147483647`.

`flags`

  Битовая маска из констант `JSON_BIGINT_AS_STRING`, `JSON_INVALID_UTF8_IGNORE`, `JSON_INVALID_UTF8_SUBSTITUTE`, `JSON_OBJECT_AS_ARRAY`, `JSON_THROW_ON_ERROR`. Поведение этих констант описаны на странице JSON-констант.

### Возвращаемые значения

Возвращает данные `json`, преобразованные в типы PHP. Не заключённые в кавычки значения `true`, `false` и `null` возвращаются как типизированные значения `true`, `false` и `null`. Значение с типом `null` также возвращается в случаях, когда параметр `json` не может быть преобразован или глубина вложенности структуры превышет установленный предел.

### Ошибки

Начиная с PHP 8.0.0, если значение параметра `depth` выходит за пределы допустимого диапазона, функция выбрасывает исключение ValueError; ранее выдавалась ошибка уровня `E_WARNING`.

### Список изменений

Версия | Описание
--- | ---
7.3.0 | Добавлена константа `JSON_THROW_ON_ERROR` для параметра `flags`.
7.2.0 | `associative` теперь nullable.
7.2.0 | Добавлены константы `JSON_INVALID_UTF8_IGNORE` и `JSON_INVALID_UTF8_SUBSTITUTE` для параметра `flags`.
7.1.0 | Пустой ключ JSON ("") будет преобразован в пустое свойство объекта, а не в свойство со значением `_empty_`.

### Примеры

Пример #1 Примеры использования json_decode()

    <?php
    $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

    var_dump(json_decode($json));
    var_dump(json_decode($json, true));

    ?>

Результат выполнения приведённого примера:

    object(stdClass)#1 (5) {
        ["a"] => int(1)
        ["b"] => int(2)
        ["c"] => int(3)
        ["d"] => int(4)
        ["e"] => int(5)
    }

    array(5) {
        ["a"] => int(1)
        ["b"] => int(2)
        ["c"] => int(3)
        ["d"] => int(4)
        ["e"] => int(5)
    }

Пример #2 Доступ к свойствам объектов с неправильными именами

Доступ к элементам объекта, которые содержат символы, недопустимые в соответствии с соглашением об именах PHP (то есть дефис), может быть выполнен путём обрамления имени элемента фигурными скобками и апострофами.

    <?php

    $json = '{"foo-bar": 12345}';

    $obj = json_decode($json);
    print $obj->{'foo-bar'}; // 12345

    ?>

Пример #3 Распространённая ошибка при использовании json_decode()

    <?php

    // Следующие строки являются валидным кодом JavaScript, но не валидными JSON-данными

    // Имя и значение должны помещаться в двойные кавычки
    // Одинарные кавычки использовать нельзя
    $bad_json = "{ 'bar': 'baz' }";
    json_decode($bad_json); // null

    // Имя должно обрамляться в двойные кавычки
    $bad_json = '{ bar: "baz" }';
    json_decode($bad_json); // null

    // Не должно быть завершающей запятой (без последующего элемента)
    $bad_json = '{ bar: "baz", }';
    json_decode($bad_json); // null

    ?>

Пример #4 Ошибки с глубиной вложенных объектов (`depth`)

    <?php
    // Закодируем данные с глубиной вложенности 4 (array -> array -> array -> string).
    $json = json_encode(
        array(
            1 => array(
                'English' => array(
                    'One',
                    'January'
                ),
                'French' => array(
                    'Une',
                    'Janvier'
                )
            )
        )
    );

    // Напечатаем ошибки для разных глубин.
    var_dump(json_decode($json, true, 4));
    echo 'Последняя ошибка: ', json_last_error_msg(), PHP_EOL, PHP_EOL;

    var_dump(json_decode($json, true, 3));
    echo 'Последняя ошибка: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
    ?>

Результат выполнения приведённого примера:

    array(1) {
      [1]=>
      array(2) {
        ["English"]=>
        array(2) {
          [0]=>
          string(3) "One"
          [1]=>
          string(7) "January"
        }
        ["French"]=>
        array(2) {
          [0]=>
          string(3) "Une"
          [1]=>
          string(7) "Janvier"
        }
      }
    }
    Последняя ошибка: No error

    NULL
    Последняя ошибка: Maximum stack depth exceeded

Пример #5 json_decode() с большими целыми числами

    <?php
    $json = '{"number": 12345678901234567890}';

    var_dump(json_decode($json));
    var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));

    ?>

Результат выполнения приведённого примера:

    object(stdClass)#1 (1) {
      ["number"]=>
      float(1.2345678901235E+19)
    }
    object(stdClass)#1 (1) {
      ["number"]=>
      string(20) "12345678901234567890"
    }

### Примечания

> Замечание:

> Спецификация JSON - это не JavaScript, а его подмножество.

> Замечание:

> В случае возникновения ошибки декодирования можно использовать json_last_error() для определения её причины.

### Смотрите также

- json_encode() - Возвращает JSON-представление данных
- json_last_error() - Возвращает код последней ошибки
- json_last_error_msg() - Возвращает строку с сообщением об ошибке последнего вызова функции json_validate(), json_encode() или json_decode()

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open