php的json_decode函数无法解析json

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

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

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添加php代码

  1. /* 
  2.  格式化错误的json数据,使其能被json_decode()解析 
  3.  不支持健名有中文、引号、花括号、冒号 
  4.  不支持健指有冒号 
  5. */  
  6. function format_ErrorJson($data,$quotes_key=false)  
  7. {  
  8.     $con = str_replace('\'','"',$data);//替换单引号为双引号 
  9.     $con = str_replace(array('\\"'),array('<|YH|>'),$con);//替换 
  10.     $con = preg_replace('/(\w+):[ {]?((?<YinHao>"?).*?\k<YinHao>[,}]?)/is', '"$1"$2',$con );//若键名没有双引号则添加  
  11.     if($quotes_key)  
  12.     {  
  13.         $con = preg_replace('/("\w+"): ?([^"\s]+)([,}])[\s]?/is', '$1: "$2"$3',$con );//给键值添加双引号 
  14.     } 
  15.     $con = str_replace(array('<|YH|>'),array('\\"'),$con);//还原替换  
  16.     return $con;  
  17. }  

参考:http://bbs.csdn.net/topics/390496037

http://chenwei.me/p/59.html

本文固定链接:http://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. 美国主机评论博客 美国主机评论博客 2014-9-23 15:54:21 +0800#5

    编程真的不会。

  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

    高科技!!

添加新评论 »

 😛 Sad 忧伤 👿 Smile 笑脸 😳 😀 😯 😮 😕 😎 😆 😡 😈 Roll Eyes 转眼珠 😉 💡 😐 😥 Mr Green 绿脸先生

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