php的json_decode函数无法解析json
作者:matrix 被围观: 6,217 次 发布时间:2014-09-04 分类:零零星星 | 9 条评论 »
这是一个创建于 3691 天前的主题,其中的信息可能已经有所发展或是发生改变。
php的json_decode函数用来解析json数据很方便,但是有时候却解析不了。
究其原因找到如下可能性:
1.键名没有用双引号括起来
['name':n,'age',a]
[name:n,age,a]
这两个都不能解析
2.出现多余逗号
['name':n,'age',a,]
###3.有些转义不支持
数据中出现\x26这样的会失败,有时候\'都无法解析。
用stripslashes()去掉转义即可!
4.json不支持gbk编码
iconv('GBK', 'UTF-8', $json_data);//使用iconv()函数将GBK转到UTF-8编码
json数据解析前用检测工具测试一下较好:http://www.bejson.com/
150515添加
/*
格式化错误的json数据,使其能被json_decode()解析
不支持健名有中文、引号、花括号、冒号
不支持健指有冒号
*/
function format_ErrorJson($data,$quotes_key=false)
{
$con = str_replace('\'','"',$data);//替换单引号为双引号
$con = str_replace(array('\\"'),array('<|YH|>'),$con);//替换
$con = preg_replace('/(\w+):[ {]?((?<YinHao>"?).*?\k<YinHao>[,}]?)/is', '"$1": $2',$con );//若键名没有双引号则添加
if($quotes_key)
{
$con = preg_replace('/("\w+"): ?([^"\s]+)([,}])[\s]?/is', '$1: "$2"$3',$con );//给键值添加双引号
}
$con = str_replace(array('<|YH|>'),array('\\"'),$con);//还原替换
return $con;
}
参考:http://bbs.csdn.net/topics/390496037
http://chenwei.me/p/59.html
感谢,解决键名没有引号的问题。 🙂
json不是用{}包裹起来的吗。。。你这怎么全是[]
不影响吧 只是个例子
编程真的不会。
我也遇到过这个情况。。最后发现那个php里面没有包含json模块,要下载下来自己编译。。。
前來支持一下~學習啦!
谢谢 😎
第一次来,围观博主大文豪
高科技!!