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

相關文章
相關標籤/搜索