Domanda

Ho riscontrato un problema con l'utilizzo di un feed specifico per un client. Mi hanno dato un URL remoto e la risposta è una stringa JSON in questo modo:

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

Ad esempio, ho ridotto il feed per mostrare il formato, ma in realtà ci sono centinaia di affiliati. Comunque, voglio usare PHP json_decode perché alla fine ho bisogno di questi affiliati in un array associativo.

Ho qualcosa del genere, ma alla fine ottengo la stringa non elaborata e json_decode non la analizza in un array associativo.

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

Sembra che debba mantenere il " \ n " caratteri nel feed stesso, ma questi vengono eliminati quando si utilizza:

file_get_contents

Comunque, penso che tu sappia cosa sto cercando, non sono sicuro di cosa sto facendo di sbagliato. Apprezzo l'aiuto in anticipo. Ho provato ad usare jquery con jsonp, ma sarebbe più ideale in questo modo dato che in seguito ho bisogno di ordinare l'array e non deve essere asincrono.

Acorn

È stato utile?

Soluzione

È possibile che il tuo feed contenga testo unicode. Prova:

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

Aggiornamento:

Risolto il problema. Ci sono istanze di \ 's nei dati json che json_decode non gestisce correttamente. Per risolvere questo problema è necessario evitare due volte il \ . Questo è quello che ho fatto.

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

Altri suggerimenti

Il tuo feed di dati sfugge a virgolette singole (apostrofi) con una barra rovesciata (ad es. \ '). Le specifiche JSON non dicono che ciò dovrebbe essere fatto, e quindi PHP non si comporta correttamente.

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

Puoi provare a sostituire tutto \ 'con':

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

prima di chiamare json_decode.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top