2016-02-11 51 views
1

我想刪除特殊字符(並發現這個在論壇):json_decode() - 語法錯誤

$response = trim(preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '', $response)); 

同樣對於這個

for ($i = 0; $i <= 31; ++$i) { 
    $response = str_replace(chr($i), "", $response); 
} 

$response = str_replace(chr(127), "", $response); 

if (0 === strpos(bin2hex($response), 'efbbbf')) { 
    $response = substr($response, 3); 
} 

而這個編碼

$response = mb_convert_encoding($response, "UTF-8"); 
echo "\nJSON Response:#$response#\n"; 

此時$response回聲:

{"data":{"taxa":[{"placa":"EDY8986","taxas_detran":"141.36","seguro_dpvat":"211.30","ipva":"1945.20","multas":"5048.10","total_debitos":"null"}]},"code":200,"pagination":{"rows":1,"page":1,"pages":0,"hasNext":false,"totalRows":1}} 

最終

$data = json_decode('"' . $response . '"',true, 512); 
echo "\n\nData>\n"; 
print_r($data); 
echo "\nError> "; echo json_last_error_msg(); 

json_last_error_msg()打印:

Syntax Error

我已經在JSONLint和JSON格式程序驗證它,它是有效的。

+2

'$數據= json_decode($響應,真實,512);' –

+0

我不能相信它。也許我瘋了。謝謝你,它的工作! –

回答

2

你只是需要littile位的變化,它很好地工作: -

$data = json_decode($response,true, 512);// remove quotes 
1

你殺了你的JSON與額外的引號:

$data = json_decode('"' . $response . '"',true, 512); 
         ^-----------------^ 

假設你的$迴應

{"foo":"bar"} 

然後你會產生/傳遞

"{"foo":"bar"}" 

這是一個徹底的JSON語法錯誤:

"{"foo":"bar"}" 
^--start string 
    ^-end string 
    ^^^---????