Помощь в использовании JSON-канала с помощью PHP и json_decode

StackOverflow https://stackoverflow.com/questions/1200603

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top