(PECL simdjson >= 2.0.0)
simdjson_is_valid — Проверяет, является ли строка JSON корректной
$json
= false
, int $depth
= 512): boolПринимает строку, закодированную в JSON и возвращает true, если она корректная.
json
Строка (string) в формате json
для проверки.
Функция работает только со строками в кодировке UTF-8.
Функция анализирует допустимые входные данные, которые функция json_decode() может декодировать, при условии, что их длина не превышает 4 Гб.
depth
Максимальная глубина вложенности декодируемой структуры.
Значение должно быть больше 0
и меньше или равно 2147483647
.
Вызывающие команды должны использовать достаточно маленькие значения,
поскольку большая глубина требуют больше места в буфере и увеличивают глубину рекурсии,
в отличие от текущей реализации функции json_decode().
Возвращает true
, если параметр json
является корректной
строкой JSON, в противном случае возвращает false
.
Если параметр json
больше 4 ГБ, то начиная с версии 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}';
$invalidJson = '{"a":1,"b":2,"c":';
var_dump(simdjson_is_valid($json));
var_dump(simdjson_is_valid($invalidJson));
?>
Результат выполнения данного примера:
bool(true) bool(false)
Пример #2 Ошибки depth
<?php
// Кодирование данных с максимальной глубиной 4
// (array -> array -> array -> string)
$json = json_encode(
[
1 => [
'English' => [
'One',
'January'
],
'French' => [
'Une',
'Janvier'
]
]
]
);
// Отображает ошибки для разных глубин.
var_dump(simdjson_is_valid($json, 4));
var_dump(simdjson_is_valid($json, 3));
?>
Результат выполнения данного примера:
bool(true) bool(false)
Замечание:
Спецификация JSON - это не JavaScript, а подмножество JavaScript.
Замечание:
В случае возникновения ошибки декодирования выбрасывается исключение SimdJsonException, а SimdJsonException::getCode() и SimdJsonException::getMessage() могут быть использованы для определения точной природы ошибки.