php jsonerrorsyntax,PHP json_decode JSON_ERROR_SYNTAX 错误详解

PHP json_decode JSON_ERROR_SYNTAX 错误详解

错误描述

在 PHP 开发过程中, 处理 JSON 字符串时, json_decode 返回 NULL, 调用 last_error 返回 4(JSON_ERROR_SYNTAX), 但是 JSON 字符串能够被其它语言如 python, JavaScript 或者一些在线的 JSON 解析器正确处理.

诊断

这里一般会有以下几种情况会造成 PHP json_decode 出错:

JSON 串从文件中读取, 字符顺序标记 (BOM) 未去除

JSON 中含有不可见字符, json_decode 解析出错

JSON 对象中值为单引号字符串

尤其是第三种错误比较隐蔽, 肉眼观察往往容易忽略

解决方案

下面针对上面三种情况分别给出解决方案

BOM

以二进制方式打开文件, 确认是否有 BOM, 如果有, 在解析之前去掉 BOM 即可. 下面的代码以 utf-8 为例, 检测并删除 BOM.functionremoveBOM($data){

if(0===strpos(bin2hex($data),'efbbbf')){

returnsubstr($data,3);

}

return$data;

}

不可见字符

解析前去除不可见字符即可.for($i=0;$i<=31;++$i){

$s=str_replace(chr($i),"",$s);

}

单引号字符串值

先看下面的例子:<?PHP

$s="{\"x\":'abcde'}";

$j=json_decode($s,true);

var_dump($j);

echo json_last_error()."\n";

PHP 5.5.9 输出

NULL

4

通常只需要把单引号替换成双引号就可以了, 具体处理时需要注意单引号可能在其它地方也出现, 是否全局替换需要根据具体情况具体分析.

来源: http://www.jianshu.com/p/e924cb9f05b3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值