json_validate

(PHP 8 >= 8.3.0)

json_validate检查字符串是否包含有效的 JSON

说明

json_validate(string $json, int $depth = 512, int $flags = 0): bool

返回给定的 string 是否是语法上有效的 JSON。如果 json_validate() 返回 true,则 json_decode() 使用相同的 depthflags 时将成功解码给定的字符串。

如果 json_validate() 返回 false,则可以使用 json_last_error()json_last_error_msg() 获取原因。

json_validate()json_decode() 使用更少的内存,如果解码的 JSON 有效负载没有使用,因为它不需要构建包含有效负载的数组或对象结构。

警告

json_decode() 之前立即调用 json_validate() 会不必要地解析字符串两次,因为 json_decode() 在解码过程中隐式地执行验证。

因此,只有在没有立即使用解码的 JSON 有效负载并且需要知道字符串是否包含有效的 JSON 时,才应使用 json_validate()

参数

json

要验证的字符串。

此函数仅适用于 UTF-8 编码的字符串。

注意:

PHP 实现了一个 JSON 的超集,如原始的 » RFC 7159 中所指定。

depth

正在解码的结构的最大嵌套深度。该值必须大于 0,并且小于或等于 2147483647

flags

当前仅接受 JSON_INVALID_UTF8_IGNORE

返回值

如果给定的字符串是语法上有效的 JSON,则返回 true,否则返回 false

错误/异常

如果 depth 超出允许范围,则会抛出 ValueError

如果 flags 不是有效的标志,则会抛出 ValueError

范例

示例 #1 json_validate() 例子

<?php
var_dump
(json_validate('{ "test": { "foo": "bar" } }'));
var_dump(json_validate('{ "": "": "" } }'));
?>

上面的例子将输出

bool(true)
bool(false)

参见

添加笔记

用户贡献的笔记 2 笔记

Behrad
7 个月前
---------------- 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

注意:来自 https://php.net/releases/8.3/en.php 的代码
Julien T.
5 个月前
在 Allan R. 的最初想法的基础上,我为使用 PHP 8.2 及更早版本的开发人员开发了一个改进版本的 json_validate 函数。该函数模拟了 PHP 8.3 中引入的功能,为在较早的 PHP 版本中验证 JSON 字符串提供了一种有效的方式。

```php
if (!function_exists('json_validate')) {
/**
* 验证 JSON 字符串。
*
* @param string $json 要验证的 JSON 字符串。
* @param int $depth 最大深度。必须大于零。
* @param int $flags JSON 解码选项的位掩码。
* @return bool 如果字符串是有效的 JSON,则返回 true,否则返回 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;
}
}
}
```

关键改进

- 字符串检查:添加了验证以确保输入是字符串。
- 错误处理:使用 try-catch 有效地捕获和处理 JsonException。
- 向后兼容性:可以在较旧的 PHP 版本中安全地集成,在 PHP 8.3+ 中会自动使用本机功能。
To Top