Home > Backend Development > PHP Tutorial > PHP8.3 will have new functions! (json_validate function description)

PHP8.3 will have new functions! (json_validate function description)

藏色散人
Release: 2023-04-11 09:58:01
forward
2270 people have browsed it

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.

PHP8.3 will have new functions! (json_validate function description)

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 {}
Copy after login

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
Copy after login

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"
Copy after login
json_validate("null"); // true

json_last_error(); // 0
json_last_error_msg(); // "No error"
Copy after login

Example

Verify the string and throw an exception

if (json_validate($_GET['json']) === false) {
    throw new \JsonException(json_last_error_msg(), json_last_error());
}
Copy after login

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']);
Copy after login

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(&#39;json_validate(): Argument #2 ($depth) must be greater than 0&#39;);  
  }  
  \json_decode($json, null, $depth, $flags);  
  return \json_last_error() === \JSON_ERROR_NONE;  
  }  
}
Copy after login

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!

Related labels:
source:learnku.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template