2015-10-19 101 views
0

我猜想裏面可能有隱藏的字符。無法解碼JSON

JSON數據:

下面的響應我使用this URL

{ 「請求」 漸:{ 「命令」: 「系列」, 「series_id」: 「ng.n3010us3.a」 }, 「數據」:{ 「錯誤」: 「沒有API_KEY對於密鑰註冊,文檔和示例見http://www.eia.gov/developer/」}}

我做了什麼:

  1. 使用的file_get_contents從URL獲取數據

  2. 使用json_decode($ rawjson,TRUE);使其成爲一個數組。 - >錯誤

的json_last_error_message顯示「語法錯誤」

我試圖找到哪個字符導致了問題。

+0

無法複製。你確定這是你的腳本正在處理的數據嗎? –

+0

http://jsonlint.com/表明你的JSON是完美的。嘗試使用json_decode並且效果非常好。在'json_decode($ rawjson,true);','echo $ rawjson;'之前加入你的代碼,並在你的文章中包含任何回顯的內容。 – zedfoxus

+0

@zedfoxus echo $ rawjson;顯示完全一樣。如果您複製並粘貼我的數據,那麼解碼不會有任何問題。但是當使用file_get_contents時,json_decode將不起作用 –

回答

2

如前所述,響應包括BOM序列。
有關字節順序標記的更多信息,請參閱here

您可以像這樣刪除它:

$j = file_get_contents("http://api.eia.gov/series/?api_key=&series_id=NG.N3010US3.A"); 

$o = json_decode(remove_bom($j)); 

var_dump($o); 


function remove_bom($string) 
{ 
    $bom = pack('H*','EFBBBF'); 
    $text = preg_replace("/^$bom/", '', $text); 
    return $sring; 
}