Pregunta

Tengo un problema con el consumo de un feed en particular para un cliente. Me han dado una URL remota y la respuesta es una cadena JSON como esta:

{"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"}
]}

A modo de ejemplo, he reducido el feed para mostrar el formato, pero en la actualidad hay cientos de afiliados. De todos modos, quiero usar PHP json_decode porque al final, necesito a estos afiliados en una matriz asociativa.

Tengo algo como esto, pero acabo de obtener la cadena en bruto, y json_decode en realidad no lo analiza en una matriz asociativa.

$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 necesito mantener el " \ n " los caracteres en la fuente en sí, pero estos se eliminan cuando se usan:

file_get_contents

De todos modos, creo que sabes lo que busco, no estoy seguro de lo que estoy haciendo mal. Aprecio la ayuda por adelantado. He intentado usar jquery con jsonp, pero sería más ideal de esta manera, ya que tengo que ordenar la matriz después y no es necesario que sea asíncrono.

Bellota

¿Fue útil?

Solución

Es posible que tu feed contenga texto Unicode. Prueba:

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

Actualización:

Resolvió el problema. Hay instancias de \ 's en los datos de json que json_decode no se manejan correctamente. Para resolver esto, necesita hacer doble escape del \ . Esto es lo que hice.

<?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);

Otros consejos

Tu fuente de datos escapa de comillas simples (apóstrofes) con una barra invertida (por ejemplo, \ '). La especificación JSON no dice que se deba hacer, y por lo tanto PHP no se comporta correctamente.

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

Puedes intentar reemplazar todos \ 'con':

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

antes de llamar a json_decode.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top