Ajuda com consumindo JSON alimentar com PHP & json_decode
Pergunta
Eu tendo um problema com o consumo de uma alimentação especial para um cliente. Eles me deram uma URL remoto e a resposta é uma string JSON assim:
{"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"}
]}
Para fins de exemplo, eu encolheu o feed para mostrar o formato, mas na verdade existem centenas de afiliados. De qualquer forma, eu quero usar o PHP json_decode porque no final, eu preciso dessas filiais em uma matriz associativa.
Eu tenho algo parecido com isto, mas eu simplesmente acabar ficando a corda crua, e json_decode na verdade não analisá-lo em uma matriz associativa.
$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);
Parece que eu preciso para manter os "\ n" caracteres na própria alimentação, mas estes se retirados quando se utiliza:
file_get_contents
De qualquer forma, eu acho que você sabe o que eu estou atrás, eu não sou apenas certo o que estou fazendo de errado. Agradeço a ajuda de antecedência. Eu tentei usar jQuery com jsonp mas seria mais ideal desta maneira desde que eu preciso para classificar a matriz depois e ele não precisa ser assíncrona.
Acorn
Solução
É possível que o seu feed contém texto unicode. Tente:
$decode = json_decode(addslashes($json), true)
Update:
Resolvido o problema. Há casos de \'s
nos dados JSON que json_decode
não lidar corretamente. Para resolver isso, você precisa escapar o dobro do \
. Isto é o que eu fiz.
<?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);
Outras dicas
Você está feed de dados escapa aspas simples (apóstrofos) com uma barra invertida (por exemplo \ '). Será que o JSON especificação não dizer isso deve ser feito, e, assim, PHP não se comportar corretamente.
Veja: http://bugs.php.net/bug.php?id = 42708
Você pode tentar a substituição de todos \ 'com':
$json = str_replace('\\\'', "'", $json);
antes de chamar json_decode.