最近在調用某公司的API時,將對方返回的數據,使用PHP的json_decode函數解析,但是返回NULL,最終排查為對方傳送來的json格式有誤
打印$_REQUEST,數據結構大致如下:
array ( 'TeleRec' => '{ Tel:\'17090114281\', Type:2, StartTime:\'2016/9/19 10:19:29\', EnteTime:\'2016/9/19 10:20:27\', param1:57, File:\'20160919101929762-2-17090114281.wav\'}', 'Source' => '', )
看完對方返回的數據不難發現以下幾點錯誤:
1、TeleRec 是json格式,但是其key,並沒有加雙引號
2、標准的key和value都應該是雙引號,現在其值為單引號
3、每一個鍵值對后有換行
解決步驟:
1、使用正則表達式,將鍵加上雙引號
2、將值得單引號轉化為雙引號
3、去掉多余的換行、空格等
代碼如下:
function ext_json_decode($str, $mode=false){ $str = preg_replace('/([{,])(\s*)([A-Za-z0-9_\-]+?)\s*:/','$1"$3":',$str); $str = str_replace('\'','"',$str); $str = str_replace(" ", "", $str); $str = str_replace('\t', "", $str); $str = str_replace('\r', "", $str); $str = str_replace("\l", "", $str); $str = preg_replace('/s+/', '',$str); $str = trim($str,chr(239).chr(187).chr(191)); return json_decode($str, $mode); }