今天在做一个判断字符串是否是json格式的功能,百度了一翻,总感觉没有靠谱的,于是决定自己亲自测试一下,测试PHP版本5.6
json_last_error是否靠谱?
注意json_decode返回的是对象,接着测试一下
json_decode('111');
var_dump(json_last_error()); // int(0)
var_dump(json_last_error() === JSON_ERROR_NONE); //bool(true)
接着再来一个
json_decode('tpframe');
var_dump(json_last_error()); // int(4)
var_dump(json_last_error() === JSON_ERROR_NONE); //bool(false)
看到了吗,字符串测试是对的,然而纯数字却不行了,结果是json_last_error() === JSON_ERROR_NONE既然为true,这肯定就没法判断了
OK,那怎么能实现准确的判断呢,下面提供一个参考
function is_json($data = '', $assoc = false) {
$data = json_decode($data, $assoc);
if (($data && (is_object($data))) || (is_array($data) && !empty($data))) {
return true;
}
return false;
}
意思是“如果存在值并且是对象 或 是数组并且不为空”都给正常的转换,否则json串有问题
其它测试
json_decode("{'site':'www.tpframe.com'}");
var_dump(json_last_error()); // int(4)
这样是有问题的,js里面肯定能过,但在php是错误的,json串要写双引号"",如果你外层一定要写"",里面就要转义了
$arr = json_decode("{\"site\":\"www.tpframe.com\"}");
var_dump(json_last_error()); // int(4)
关于json串就总结在这里,有问题留言讨论