json_decode转换数组过程中,结果为null处理办法,百分之百有效

  json_decode这个函数是json_encode的反函数,一般传递数据的时候为了压缩数据,会将数组格式的数据转换成json格式,用到的函数就是json_encode,然后接收到数据之后再用json_decode转换回数组;

  json_decode($json)之后可能出现返回空,null等结果,这个时候一般都是json格式出问题, 可以用json_last_error()来检查,json_last_error()函数的使用方式就是在json_decode之后添加这个函数, 函数会返回值,返回0说明格式没错, 若返回4,说明格式错误。

  折磨了好几个小时,终于找到了解决办法,现在记录如下:

  第一种:

  

 json_encode()中文在gbk/gb2312中对中文返回为null,而json_decode()函数只支持UTF-8与ASCII编码,如果是gkb就会出问题;

    解决办法:

    第一种:

/**
     * UTF-8编码 GBK编码相互转换/(支持数组)
     * @param array $str   字符串,支持数组传递
     * @return array
     */
    function array_iconv( $str ){
        if(is_array( $str )) {
           foreach( $str as $k => $v ) {
               $str[$k] = array_iconv( $v );
           }
           return $str;
      } else {
            if(is_string( $str )) {
               return iconv( 'GBK//IGNORE', 'UTF-8', $str );
            }else {
                return $str;
            }
        }
    }
    echo json_encode(icon_to_utf8($str));

    第二种:bom头导致的bug,bom头的产生应该是你的文件在windows下用记事本这些东西编辑过之后的后果。 因为bom头是看不见的, 所以转换的时候前面多了三个字节,

    解决办法:可用$json = substr ( $json, 3 );去掉头部的三个字节, 转换之后ok了。


最后再介绍一种,原因是

    (1)$str只能UTF-8编码

    (2)元素最后不能有逗号(与php的array不同)

    (3)元素不能使用单引号

    (4)元素值中间不能有空格和n,必须替换

解决方法:

$data = stripslashes(html_entity_decode($info)); 
//$info是传递过来的json字符串
$data = json_decode($data,TRUE);
//这时候$data就是解析后的数组了!
//html_entity_decode() 函数的作用是把 HTML 实体转换为字符。
//stripslashes() 函数的作用是删除反斜杠。

  

以上几种,绝对有一种可以解决问题。我是在微信开发中遇到的,调试很尴尬,打印老半天总算解决了。真是个惨痛的教训。。。。。。。。。

 

    

转载于:https://www.cnblogs.com/phper12580/p/10184394.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值