在PHP中检查一个字符串是否为JSON的最快方法是什么?
在PHP中检查一个字符串是否为JSON的最快方法是什么?
我需要一种非常快速的方法来检查一个字符串是否为JSON。我感觉这不是最好的方法:
function isJson($string) { return ((is_string($string) && (is_object(json_decode($string)) || is_array(json_decode($string))))) ? true : false; }
。有没有性能专家想要改进这种方法?
admin 更改状态以发布 2023年5月21日
问题的答案
函数json_last_error
返回JSON编码和解码期间最后发生的错误。因此,检查有效的JSON的最快方法是
// decode the JSON data // set second parameter boolean TRUE for associative array output. $result = json_decode($json); if (json_last_error() === JSON_ERROR_NONE) { // JSON is valid } // OR this is equivalent if (json_last_error() === 0) { // JSON is valid }
请注意,json_last_error
仅在PHP> = 5.3.0中受支持。
检查确切错误的完整程序
在开发时间知道确切的错误总是很有用的。这是根据PHP文档检查确切错误的完整程序。
function json_validate($string) { // decode the JSON data $result = json_decode($string); // switch and check possible JSON errors switch (json_last_error()) { case JSON_ERROR_NONE: $error = ''; // JSON is valid // No error has occurred break; case JSON_ERROR_DEPTH: $error = 'The maximum stack depth has been exceeded.'; break; case JSON_ERROR_STATE_MISMATCH: $error = 'Invalid or malformed JSON.'; break; case JSON_ERROR_CTRL_CHAR: $error = 'Control character error, possibly incorrectly encoded.'; break; case JSON_ERROR_SYNTAX: $error = 'Syntax error, malformed JSON.'; break; // PHP >= 5.3.3 case JSON_ERROR_UTF8: $error = 'Malformed UTF-8 characters, possibly incorrectly encoded.'; break; // PHP >= 5.5.0 case JSON_ERROR_RECURSION: $error = 'One or more recursive references in the value to be encoded.'; break; // PHP >= 5.5.0 case JSON_ERROR_INF_OR_NAN: $error = 'One or more NAN or INF values in the value to be encoded.'; break; case JSON_ERROR_UNSUPPORTED_TYPE: $error = 'A value of a type that cannot be encoded was given.'; break; default: $error = 'Unknown JSON error occured.'; break; } if ($error !== '') { // throw the Exception or exit // or whatever :) exit($error); } // everything is OK return $result; }
使用有效的JSON输入进行测试
$json = '[{"user_id":13,"username":"stack"},{"user_id":14,"username":"over"}]'; $output = json_validate($json); print_r($output);
有效的输出
Array ( [0] => stdClass Object ( [user_id] => 13 [username] => stack ) [1] => stdClass Object ( [user_id] => 14 [username] => over ) )
使用无效JSON进行测试
$json = '{background-color:yellow;color:#000;padding:10px;width:650px;}'; $output = json_validate($json); print_r($output);
无效的输出
Syntax error, malformed JSON.
(PHP> = 5.2 && PHP <5.3.0)的额外注意事项
由于json_last_error
不支持PHP 5.2,因此您可以检查编码或解码是否返回布尔值FALSE
。这是一个例子
// decode the JSON data $result = json_decode($json); if ($result === FALSE) { // JSON is invalid }