在 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+ 中会自动使用本机功能。