Помощь в использовании JSON-фида с помощью PHP и json_decode - PullRequest
1 голос
/ 29 июля 2009

У меня проблема с потреблением определенного фида для клиента. Они дали мне удаленный 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, но это было бы более идеальным способом, так как мне нужно потом отсортировать массив, и он не должен быть асинхронным.

Acorn

Ответы [ 2 ]

5 голосов
/ 29 июля 2009

Возможно, ваш фид содержит текст в юникоде. Попробуйте:

$decode = json_decode(addslashes($json), true)

Обновление:

Решил проблему. В данных json есть примеры \'s, которые 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);
3 голосов
/ 29 июля 2009

Ваш фид данных экранирует одинарные кавычки (апострофы) с обратной косой чертой (например, \ '). Спецификация JSON не говорит, что это должно быть сделано, и, следовательно, PHP не работает правильно.

См .: http://bugs.php.net/bug.php?id=42708

Вы можете попробовать заменить все \ 'на':

$json = str_replace('\\\'', "'", $json);

перед вызовом json_decode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...