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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top