zoukankan      html  css  js  c++  java
  • 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() 函数的作用是删除反斜杠。
    

      

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

        

  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/phper12580/p/10184394.html
Copyright © 2011-2022 走看看