LonghornPHP 2026

simdjson_decode

(PECL simdjson >= 2.0.0)

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

Описание

function simdjson_decode(string $json, bool $associative = false , int $depth = 512): mixed

Принимает строку в кодировке 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() могут быть использованы для определения точной природы ошибки.

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

  • json_encode() - Возвращает JSON-представление данных
  • json_decode() - Декодирует строку JSON

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы

AltStyle によって変換されたページ (->オリジナル) /