扫一扫浏览

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

未结贴
0 3645
狗尾巴未认证 2018-12-31 22:56:12
收藏

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

最近热帖 HOT TOPIC
父元素flex之后,子元素高度自适应问题 5063
thinkphp5隐藏默认模块的一些问题 4574
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)php实现 4270
关于thinkphp5.0.x getshell漏洞的说明 4066
tpframe新建主题 4044
教你如果处理高并发数据不同步的问题php篇 3969
移动web资源整理,你值得收藏的干货 3823
omnicore rpc api中文手册【usdt】 3812
【全套视频】thinkphp5视频教程 3766
2018最新版PHP视频教程-ThinkPHP5商城系统+项目实战 3717
月度热议HOT COMMENTS
tpframe 后续版本你希望有的功能是什么(分享贴) 12
权限那里怎么一登录别的账号就报错啊 9
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
tpframe插件tcms插件v2.2已发布上线,欢迎下载使用 5
tpframe6.0马上就要跟大家见面了,一次全新的升级 5
新增的管理员没有权限操作CMS模块。 3
api接口文档插件easydoc的基本用法,快速搞定接口文档 3
thinkphp5自动完成操作,两次运行的详解 2