(PECL simdjson >= 2.0.0)
simdjson_decode — Декодирует строку JSON
Принимает строку в кодировке JSON и преобразовывает её в значение PHP. При этом будет использована более быстрая реализация Simultaneous Instruction, Multiple Data, чем в функции json_decode(), если это поддерживается архитектурой компьютера.
json
      Декодируемая строка (string) в json формате.
     
Функция работает только со строками в кодировке UTF-8.
Функция анализирует допустимые входные данные, которые функция json_decode() может декодировать, при условии, что их длина не превышает 4 Гб.
associative
      При значении true, объекты JSON будут возвращены как ассоциативные массивы (array);
      при значении false, объекты JSON будут возвращены как объекты (object).
     
depth
      Максимальная глубина вложенности декодируемой структуры.
      Значение должно быть больше 0 и меньше или равно 2147483647.
      Вызывающие команды должны использовать достаточно маленькие значения,
      поскольку большая глубина требуют больше места в буфере и увеличивают глубину рекурсии,
      в отличие от текущей реализации функции json_decode().
     
   Возвращает значение, закодированное в параметре json
   в соответствующем типе PHP.
   Значения true, false и null
   возвращаются как true, false и null соответственно.
  
   Если параметр json недействителен, то начиная с версии PECL simdjson 2.1.0
   выбрасывается исключение SimdJsonException,
   тогда как ранее выбрасывалось исключение RuntimeException.
  
   Если параметр depth находится вне допустимого диапазона,
   то начиная с версии PECL simdjson 3.0.0 выбрасывается исключение SimdJsonValueError,
   тогда как ранее выдавалась ошибка уровня E_WARNING.
  
Пример #1 Примеры использования simdjson_decode()
<?php
$json = '{"a":1,"b":2,"c":3}';
var_dump(simdjson_decode($json));
var_dump(simdjson_decode($json, true));
?>Результат выполнения приведённого примера:
object(stdClass)#1 (3) {
  ["a"]=>
  int(1)
  ["b"]=>
  int(2)
  ["c"]=>
  int(3)
}
array(3) {
  ["a"]=>
  int(1)
  ["b"]=>
  int(2)
  ["c"]=>
  int(3)
}
Пример #2 Доступ к недопустимым свойствам объекта
Доступ к элементам объекта, содержащим символы, не разрешённые соглашением PHP об именовании (например, дефис), может быть осуществлён путём заключения имени элемента в фигурные скобки и апостроф.
<?php
$json = '{"foo-bar": 12345}';
$obj = simdjson_decode($json);
print $obj->{'foo-bar'}; // 12345
?>Пример #3 Распространённые ошибки при использовании simdjson_decode()
<?php
// следующие строки являются допустимыми JavaScript, но не являются допустимыми JSON
// имя и значение должны быть заключены в двойные кавычки
// одинарные кавычки недопустимы
$bad_json = "{ 'bar': 'baz' }";
simdjson_decode($bad_json); // Выбрасывается исключение SimdJsonException
// имя должно быть заключено в двойные кавычки
$bad_json = '{ bar: "baz" }';
simdjson_decode($bad_json); // Выбрасывается исключение SimdJsonException
// запятые в конце не допускаются
$bad_json = '{ bar: "baz", }';
simdjson_decode($bad_json); // Выбрасывается исключение SimdJsonException
?>Пример #4 Ошибки depth
<?php
// Кодирование некоторых данных с максимальной глубиной 4
// (array -> array -> array -> string)
$json = json_encode(
    [
        1 => [
            'English' => [
                'One',
                'January'
            ],
            'French' => [
                'Une',
                'Janvier'
            ]
        ]
    ]
);
// Отображение ошибок для разных глубин.
var_dump(simdjson_decode($json, true, 4));
try {
    var_dump(simdjson_decode($json, true, 3));
} catch (SimdJsonException $e) {
     echo "Попался: ", $e->getMessage(), "\n";
}
?>Результат выполнения приведённого примера:
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"
    }
  }
}
Попался: The JSON document was too deep (too many nested objects and arrays)
Пример #5 simdjson_decode() больших целых чисел
<?php
$json = '{"number": 12345678901234567890}';
var_dump(simdjson_decode($json));
?>Результат выполнения приведённого примера:
object(stdClass)#1 (1) {
  ["number"]=>
  float(1.2345678901235E+19)
}
Замечание:
Спецификация JSON - это не JavaScript, а подмножество JavaScript.
Замечание:
В случае возникновения ошибки декодирования выбрасывается исключение SimdJsonException, а SimdJsonException::getCode() и SimdJsonException::getMessage() могут быть использованы для определения точной природы ошибки.
