php 判断是否json字符串_PHP如何判断字符串是否为json格式

今天在做一个判断字符串是否是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串就总结在这里,有问题留言讨论

你可能感兴趣的:(php,判断是否json字符串)