碰到了PHP json_decode returns NULL, 肿么办?
1. google 一下, 关键字:PHP json_decode NULL
首先你能看到我这个这个帖子:)
http://www.cnblogs.com/shgq/admin/EditPosts.aspx?opt=1
2. 使用json_last_error()函数获取到的返回值来帮助我们判断出问题的原因。
其中如果提示错误JSON_ERROR_SYNTAX(Syntax error),表示json串格式错误。
可以通过以下几个方式排错:
a. json字符串必须以双引号包含
$output = str_replace("'", '"', $output);
b json字符串必须是utf8编码
$output = iconv('gbk', 'utf8', $output);
c.不能有多余的逗号 如:[1,2,]
用正则替换掉,preg_replace('/,s*([]}])/m', '$1', $output)
3. 我用UTF-8的php写了一个接口,调用时字符串tace出来也正常。
比较了json_decode 前字符串的长度,字符串比想要的多出了6个字符。
分别是239,187,191,239,187,191
有文章说会多3个字符,是DOM的标志。DOM是什么不解释,自己google去。
我的程序多出6个字符,实践才是真道理啊。
4. 解决办法一:调用接口的地方预处理一下:substr($str,6)
5.如果每次都预处理,太烦,有没有更方便的办法了从源上解决问题了?
解决办法2: 我用nodepad++把该文件保存成UTF-8 without DOM,搞定。
再也不用担心null问题了。