Ayuda para consumir fuentes JSON con PHP & amp; json_decode
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
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.