php的json_decode函数无法解析json

作者:matrix 被围观: 6,015 次 发布时间:2014-09-04 分类:零零星星 | 9 条评论 »

这是一个创建于 3494 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

其他文章:
本文固定链接:https://www.hhtjim.com/php-json_decode-function-to-parse-the-json.html
matrix
本文章由 matrix 于2014年09月04日发布在零零星星分类下,目前没有通告,你可以至底部留下评论。
转载请注明:php的json_decode函数无法解析json-HHTjim'S 部落格
关键字:, , , ,

有9 条评论 »

  1. 蒋小凌 蒋小凌 2016-5-8 14:55:16 +0800#7

    感谢,解决键名没有引号的问题。 🙂

  2. 佳佳君 佳佳君 2014-12-17 22:32:03 +0800#6

    json不是用{}包裹起来的吗。。。你这怎么全是[]

    • Matrix Matrix Moderator 2014-12-29 22:30:13 +0800

      不影响吧 只是个例子

  3. 编程真的不会。

  4. 香菇肥牛 香菇肥牛 2014-9-23 4:47:26 +0800#4

    我也遇到过这个情况。。最后发现那个php里面没有包含json模块,要下载下来自己编译。。。

  5. 超級efly 超級efly 2014-9-20 11:46:58 +0800#3

    前來支持一下~學習啦! :mrgreen: :mrgreen:

  6. 廊坊网站建设 廊坊网站建设 2014-9-17 9:08:47 +0800#2

    第一次来,围观博主大文豪

  7. 快乐淘 快乐淘 2014-9-5 17:02:31 +0800#1

    高科技!!

添加新评论 »

 🙈 😱 😂 😛 😭 😳 😀 😆 👿 😉 😯 😮 😕 😎 😐 😥 😡 😈 💡

插入图片

NOTICE: You should type some Chinese word (like “你好”) in your comment to pass the spam-check, thanks for your patience!