Помощь в использовании JSON-канала с помощью PHP и json_decode
Вопрос
У меня возникла проблема с использованием определенного канала для клиента.Они предоставили мне удаленный URL, и ответом является строка JSON, подобная этой:
{"affiliate": [
{"ID":"1", "COUNTRY":"EXAMPLE", "NETWORK":"EXAMPLE", "PRIMARY":"EXAMPLE"},
{"ID":"2", "EXAMPLE":"EXAMPLE", "COUNTRY":"EXAMPLE", "NETWORK":"EXAMPLE", "PRIMARY":"EXAMPLE"},
{"ID":"3", "TITLE":"EXAMPLE", "COUNTRY":"EXAMPLE", "NETWORK":"EXAMPLE", "PRIMARY":"EXAMPLE"}
]}
Например, я сократил ленту, чтобы показать формат, но на самом деле там сотни партнеров.В любом случае, я хочу использовать PHP json_decode, потому что, в конце концов, мне нужны эти филиалы в ассоциативном массиве.
У меня есть что-то вроде этого, но в итоге я просто получаю необработанную строку, и json_decode фактически не преобразует ее в ассоциативный массив.
$request_url = "http://exampleurl.com/feed"; //returns feed like above
$json = file_get_contents($request_url, true); //getting the file content
$decode = json_decode($json, true);
print_r($decode);
Похоже, мне нужно сохранить символы "\ n" в самом канале, но они удаляются при использовании:
file_get_contents
В любом случае, я думаю, вы знаете, к чему я стремлюсь, я просто не уверен, что делаю не так.Я заранее ценю вашу помощь.Я пробовал использовать jquery с jsonp, но этот способ был бы более идеальным, поскольку после мне нужно отсортировать массив, и он не обязательно должен быть асинхронным.
Желудь
Решение
Вполне возможно, что ваш канал содержит текст в юникоде.Попробуй:
$decode = json_decode(addslashes($json), true)
Обновить:
Решил проблему.Существуют примеры \'s
в данных json, которые json_decode
не справляется должным образом.Чтобы решить эту проблему, вам нужно дважды экранировать \
.Это то, что я сделал.
<?php
error_reporting(E_ALL);
$request_url = 'http://midas.glam.com/publisher_directory_data?network=glam&country=US&publish=Y';
$json = file_get_contents($request_url);
$json = str_replace('\\', '\\\\', $json);
$decode = json_decode($json, true);
var_dump($decode);
Другие советы
Ваш канал данных экранирует одинарные кавычки (апострофы) обратной косой чертой (например\').В спецификации JSON не сказано, что это должно быть сделано, и, следовательно, PHP ведет себя некорректно.
Видишь: http://bugs.php.net/bug.php?id=42708
Вы можете попробовать заменить все \' на ':
$json = str_replace('\\\'', "'", $json);
перед вызовом json_decode.