编程中也时时时对接口进行json_encode / json_decode。
那么如果所得的字符串不是标准的格式,有什么办法快速检测吗?

本文就来说一说。

学习韶光

最快的办法,还是利用PHP内置的 json_decode 函数,对付此函数的参数和返回值,我们须要负责地剖析。

php判断json3分钟短文  PHP咋断定字符串是尺度JSON如许写很高效 jQuery

该函数接管一个 JSON 编码的字符串并且把它转换为 PHP 变量。
函数构造:

mixed json_decode( string $json[, bool $assoc = false[, int $depth = 512[, int $options = 0]]] )

除了第一个字符串类型的$json必填之外,其他都是选填。
如果我们定制功能,须要后面的参数也指定。
比如,解码的字符串解析为关联数组,那么就指定 $assoc = true。

考虑到兼容性的哀求,$json 传入的字符串,必须是 UTF-8 编码格式。

我们试着编写一个助手函数,用于判断字符串是否标准的json格式:

function isJson($string) { json_decode($string); return (json_last_error() == JSON_ERROR_NONE);}

这个方法利用了2个函数,和1个常量。
个中 json_decode 是对字符串解码暂且不说。
json_last_error 函数,如果有返回值,则是 JSON 编码解码时末了发生的缺点。

JSON_ERROR_NONE 是无缺点,=0。
该句判断没有缺点则是标准格式,返回 true;否则返回 false。

深入学习

实在上面的代码对付 json 加解码过程中的缺点判断还是比较粗糙的。
有一位小哥不嫌繁琐,手动拼装了详细的缺点处理函数,非常实用。

利用上述函数进行测试:

$json = '[{"user_id":13,"username":"stack"},{"user_id":14,"username":"over"}]';$output = json_validate($json);print_r($output);

输出内容如下:

这是正常的情形,json 格式完备精确。
我们再测试一个不是规范格式的字符串。

$json = '{background-color:yellow;color:#000;padding:10px;width:650px;}';$output = json_validate($json);print_r($output);

输出错误信息:

Syntax error, malformed JSON.万能的正则

跟字符串打交道,正则表达式险些可以做统统你想要的结果。
json 字符串也一样,据文档所说,利用正则表达式判断JSON格式,稳定有效,而且速率还很快。

下面这个正则表达式您拿小本本记好了,千篇一律地抄下来用就可以了。

return !preg_match('/[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]/', preg_replace('/"(\\.|[^"\\\\])"/', '', $json_string));写在末了

如果考虑程序的可读性,和可掩护性,利用 json_decode 函数的判断无疑更直不雅观,大家也更熟习。
然而正则表达式所表示出的高效也是不容小觑的。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。