json_decode转换json数据为数组为NULL

 

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

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

  若数据未正常转换出来,可能有两种状况:数组

  一、 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下用记事本这些东西编辑过以后的后果。spa

   由于bom头是看不见的, 因此转换的时候前面多了三个字节,解决办法:可用$json = substr ( $json, 3 );去掉头部的三个字节, 转换以后ok了;code

相关文章
相关标签/搜索