扫一扫浏览

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

未结贴
0 546
狗尾巴未认证 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视频教程 1346
thinkphp5隐藏默认模块的一些问题 1338
教你如果处理高并发数据不同步的问题php篇 1150
TPFrame框架robot模块重磅来袭,内附2.1版本 1127
tpframe安装教程 1119
tpframe新建主题 1074
tpframe应用目录结构 1050
slide模块发布 1045
thinkphp5自动完成操作,两次运行的详解 1022
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)php实现 1002
月度热议HOT COMMENTS
tpframe 后续版本你希望有的功能是什么(分享贴) 12
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
新增的管理员没有权限操作CMS模块。 3
api接口文档插件easydoc的基本用法,快速搞定接口文档 3
thinkphp5自动完成操作,两次运行的详解 2
tpframe-curd操作之添加数据 2
tpframe能带给你的,让你快速搞定各服务端(api,pc,mobile,wechat)代码的框架 2
slide模块发布 2
爆料早知道:TPFrame v3.2版本已更新我有好想法