PHP 检查字符串是否为 Json 格式的最佳方法
|
我需要一种非常非常快速的检查字符串是否为JSON的方法。我觉得这不是最好的方法: function isJson($string) { return ((is_string($string) && (is_object(json_decode($string)) || is_array(json_decode($string))))) ? true : false; } php爱好者有什么最佳的方法吗? 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 INPUT进行测试 $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_errorPHP 5.2不支持,您可以检查编码或解码是否返回布尔值FALSE。这是一个例子 // decode the JSON data $result = json_decode($json); if ($result === FALSE) { // JSON is invalid } 希望这有用。快乐的脚本之家! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
