phpjson_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

03-04 15:00