2015-10-19 4 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);', do '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; 
} 
Смежные вопросы