跟老姚学前端,课程体系更完善,10%基础 + 90%实战演练,快人一步学编程

扫一扫浏览

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

未结贴
0 9237
狗尾巴站长未认证 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
【全套视频】thinkphp5视频教程 87289
父元素flex之后,子元素高度自适应问题 10991
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)php实现 10167
thinkphp5隐藏默认模块的一些问题 9538
api接口文档插件easydoc的基本用法,快速搞定接口文档 9491
omnicore rpc api中文手册【usdt】 9323
PHP如何判断字符串是否为json格式 9238
教你如果处理高并发数据不同步的问题php篇 9076
关于thinkphp5.0.x getshell漏洞的说明 8895
使用宝塔linux面板创建FTP无法连接的解决办法(阿里云或腾讯云) 8776
月度热议HOT COMMENTS
【全套视频】thinkphp5视频教程 71
tpframe 后续版本你希望有的功能是什么(分享贴) 12
权限那里怎么一登录别的账号就报错啊 9
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
tpframe插件tcms插件v2.2已发布上线,欢迎下载使用 5
tpframe6.0马上就要跟大家见面了,一次全新的升级 5
透析thinkphp5升级版开发框架tpframe 3
新增的管理员没有权限操作CMS模块。 3
爆料早知道: