1. 程式人生 > >json_decode的結果為null,json_encode的結果為

json_decode的結果為null,json_encode的結果為

      首先,樓主在寫介面的時候,是用laravel查詢資料庫,然後對返回的結果進行:json_decode(json_encode($ret),true),,本以為能順利的轉化為json字串輸出的,結果卻發現結果為null,因此記錄一下。

一、json_decode($str,true)的結果為null

1、原因:
(1)$str只能UTF-8編碼

(2)元素最後不能有逗號(與php的array不同)

(3)元素不能使用單引號

(4)元素值中間不能有空格和n,必須替換

2、解決方案:

$data = stripslashes(html_entity_decode($info
)); //$info是傳遞過來的json字串 $data = json_decode($data,TRUE); //這時候$data就是解析後的陣列了! //html_entity_decode() 函式的作用是把 HTML 實體轉換為字元。 //stripslashes() 函式的作用是刪除反斜槓。

二、js_encode的結果為false

1、是的,在我排除json_decode為null的問題之後,我發現我的json_encode的結果竟然為false,很無奈,百度了一下,人家說主要原因就是字元格式的問題。php的json_encode($str)裡面的str只能是UTF-8格式的。

2、解決方案:

function array_iconv($in_charset,$out_charset,$arr){  
        return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));  
} 

      網上找的程式碼是這個,但需要因大家的實際業務來寫,比如我的$arr是個陣列物件,而且用eval之後一直報錯,所以我就直接改了下:

 $ret =iconv('GBK','UTF-8//IGNORE',var_export($arr,true));
   return MyResponse::success(json_decode(json_encode($ret
),true),200);

這樣就OK了,成功的輸出了json字串

三、遇到的問題:

1、PHP的iconv()函式遇到的錯誤: Detected an illegal character in input string …

      原因:你要轉換的陣列中含有iconv()函式不認識的字元,可能是繁體字,也可能是反斜槓等。
      解決方案:
(1) 擴大輸出字元編碼的範圍,如把GBK2312改為GBK.
(2) 在輸出的字元編碼字串後面加上”//IGNORE”,如iconv(‘GBK’,’UTF-8//IGNORE’,var_export($arr,true)),這樣做其實是忽略了不能轉換的字元,避免了出錯但卻不能夠正確地輸出(即空白不、輸出)。

2、 eval()’d code line 3:

解決方案:
(1)檢視你的程式碼,要知道eval()裡面輸出的必須是符合php規範的,也就是逗號,分號,一個都不能少
(2)注意有沒有漏掉反斜槓,如:
eval("if ($strif) {\$ifFlag=true;}else{\$ifFlag=false;}");
eval("if  (\$strif) {\$ifFlag=true;}else{\$ifFlag=false;}");

上面的因為少個反斜槓,所以報錯了。。

end