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() 函數的作用是刪除反斜杠。

  

以上幾種,絕對有一種可以解決問題。我是在微信開發中遇到的,調試很尷尬,打印老半天總算解決了。真是個慘痛的教訓。。。。。。。。。

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM