Home > Article > Backend Development > PHP8.3 will have new functions! (json_validate function description)
This article brings you the latest relevant information about php8.3, which mainly introduces that PHP8.3 will add a function named json_validate, so what is the use of this function? How to use it? Let’s take a look at it together, I hope it will be helpful to everyone.
PHP 8.3 Preview: `json_validate` function
PHP 8.3 will add a function named json_validate for validating the passed Whether the input string is a legal JSON string.
Currently, a common practice for validating a JSON string is to try to decode it and determine by catching an exception. But in some cases we may not need to obtain specific content, but only need to verify that it is legal. The new json_validate function consumes less memory and resources than json_decode because it only parses the string without trying to decode it.
Function signature
/** * 验证传入的字符串是否为合法 JSON 字符串 * * @param string $json 准备验证的字符串 * @param int $depth 最大嵌套深度,必须大于 0 * @param int $flags 标志掩码,用于指定行为 * @return bool $json 是合法 JSON 字符串时返回 true,否则返回 false */ function json_validate(string $json, int $depth = 512, int $flags = 0): bool {}
Flags
The third parameter of json_validate is flags, which is used to specify the behavior of the function . Currently, the only available flag is JSON_INVALID_UTF8_IGNORE.
This flag was added in PHP 7.2 as a flag constant of json_decode, used to ignore UTF-8 characters in the corresponding string.
json_validate('[1, 2, 3]', flags: JSON_INVALID_UTF8_IGNORE); // true json_validate("[\"\xc1\xc1\",\"a\"]"); // false json_validate("[\"\xc1\xc1\",\"a\"]", flags: JSON_INVALID_UTF8_IGNORE); // true
Error handling
json_validate itself does not return an error code. If you want to get specific error information, you can use json_last_error and json_last_error_msg to get it.
json_validate(""); // false json_last_error(); // 4 json_last_error_msg(); // "Syntax error"
json_validate("null"); // true json_last_error(); // 0 json_last_error_msg(); // "No error"
Example
Verify the string and throw an exception
if (json_validate($_GET['json']) === false) { throw new \JsonException(json_last_error_msg(), json_last_error()); }
Replace the previous verification method
- $value = json_decode($_GET['json'], flags: JSON_THROW_ON_ERROR); + if (!json_validate($_GET['json'])) { + throw new \JsonException(json_last_error_msg(), json_last_error()); + } + $value = json_decode($_GET['json']);
Polyfill Preemptive Adaptation
If you want to adapt to PHP 8.3 in advance so that you can seamlessly switch to json_validate as soon as 8.3 is released, you It is possible to manually define a function to mimic the behavior of json_validate in previous versions.
if (!function_exists('json_validate')) { function json_validate(string $json, int $depth = 512, int $flags = 0): bool { if ($flags !== 0 && $flags !== \JSON_INVALID_UTF8_IGNORE) { throw new \ValueError('json_validate(): Argument #3 ($flags) must be a valid flag (allowed flags: JSON_INVALID_UTF8_IGNORE)'); } if ($depth <= 0 ) { throw new \ValueError('json_validate(): Argument #2 ($depth) must be greater than 0'); } \json_decode($json, null, $depth, $flags); return \json_last_error() === \JSON_ERROR_NONE; } }
Since this function still uses json_decode internally, there is actually no performance improvement, but it only provides an interface similar to json_validate.
Recommended learning: "PHP Video Tutorial"
The above is the detailed content of PHP8.3 will have new functions! (json_validate function description). For more information, please follow other related articles on the PHP Chinese website!