json_decode返回NULL


最近在調用某公司的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);  
}  

 


免責聲明!

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



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