(PHP 8 >= 8.3.0)
json_validate — Проверяет, содержит ли строка допустимые данные в JSON-формате
Функция проверяет, соответствует ли синтаксис входной строки (string ) формату JSON, и возвращает результат.
Если функция json_validate() вернёт true , функция json_decode()
успешно декодирует входную строку при передаче тех же аргументов
depth и flags.
Функции json_last_error() и json_last_error_msg()
укажут причину, если функция json_validate() вернёт false .
Функция json_validate() использует меньше памяти, чем функция json_decode() , поскольку функции json_validate() не нужно декодировать полезную нагрузку JSON или создавать структуру массива или объекта, которая содержит полезную нагрузку.
Вызов функции json_validate() непосредственно перед функцией json_decode() приведёт к ненужному двойному разбору строки, поскольку функция json_decode() неявно выполняет такую проверку при декодировании.
Функцию json_validate() вызывают только в случае, когда данные декодирования полезной нагрузки JSON не нужны немедленно, и требуется знать, содержит ли строка допустимый JSON.
jsonСтрока для проверки.
Функция работает только со строками в кодировке UTF-8.
Замечание: PHP реализует расширенный набор JSON, который описывает исходный стандарт » RFC 7159.
depth
Максимальная глубина вложенности структуры,
которую будет декодировать функция.
Значение должно быть больше 0 и меньше или равно 2 147 483 647.
flags
Пока принимается только
константа JSON_INVALID_UTF8_IGNORE .
Функция возвращает true , если входная строка — синтаксически допустимый JSON,
иначе false .
Выбрасывается исключение ValueError ,
если значение параметра depth выходит за пределы допустимого диапазона.
Если значение параметра flags — недопустимый флаг,
выбрасывается исключение ValueError .
Пример #1 Пример использования функции json_validate()
<?php
var_dump(json_validate('{ "test": { "foo": "bar" } }'));
var_dump(json_validate('{ "": "": "" } }'));
?>Результат выполнения приведённого примера:
bool(true) bool(false)
---------------- PHP < 8.3 ----------------
function json_validate(string $string): bool {
json_decode($string);
return json_last_error() === JSON_ERROR_NONE;
}
var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true
---------------- PHP >= 8.3 ----------------
var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true
Note: code from https://www.php.net/releases/8.3/en.php Building upon Allan R.'s initial idea, I've developed an improved version of the json_validate function for those using PHP 8.2 and earlier versions. This function emulates the functionality introduced in PHP 8.3, providing an effective way to validate JSON strings in earlier PHP versions.
```php
if (!function_exists('json_validate')) {
/**
* Validates a JSON string.
*
* @param string $json The JSON string to validate.
* @param int $depth Maximum depth. Must be greater than zero.
* @param int $flags Bitmask of JSON decode options.
* @return bool Returns true if the string is a valid JSON, otherwise false.
*/
function json_validate($json, $depth = 512, $flags = 0) {
if (!is_string($json)) {
return false;
}
try {
json_decode($json, false, $depth, $flags | JSON_THROW_ON_ERROR);
return true;
} catch (\JsonException $e) {
return false;
}
}
}
```
Key Improvements:
- String Check: Added a validation to ensure the input is a string.
- Error Handling: Utilizes try-catch to effectively catch and handle JsonException.
- Backward Compatibility: Safely integrable in older PHP versions, automatically deferring to native functionality in PHP 8.3+.Please note that this will return true if the value is numerical, whether it's of type int/float, or a string. This is something to be aware of if you're expecting an array/object, which may cause issues down the line when handling it.