Aide à la consommation de flux JSON avec PHP & amp; json_decode
Question
J'ai un problème avec la consommation d'un flux particulier pour un client. Ils m'ont donné une URL distante et la réponse est une chaîne JSON comme suit:
{"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"}
]}
Par exemple, j'ai réduit le flux pour afficher le format, mais en réalité, il y a des centaines d'affiliés. En tout cas, je veux utiliser PHP json_decode car, au final, j'ai besoin de ces affiliés dans un tableau associatif.
J'ai quelque chose comme ça, mais je finis par obtenir la chaîne brute, et json_decode ne l'analyse pas dans un tableau associatif.
$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);
Il semble que j’ai besoin de conserver le " \ n " caractères dans le flux lui-même, mais ceux-ci sont supprimés lors de l'utilisation de:
file_get_contents
Quoi qu'il en soit, je pense que vous savez ce que je cherche, mais je ne suis pas sûr de ce que je fais mal. J'apprécie l'aide à l'avance. J'ai essayé d'utiliser jquery avec jsonp, mais ce serait plus idéal de cette façon, car je dois ensuite trier le tableau et il n'est pas nécessaire qu'il soit asynchrone.
Gland
La solution
Il est possible que votre flux contienne du texte Unicode. Essayez:
$decode = json_decode(addslashes($json), true)
Mise à jour:
Résolu le problème. Il existe des instances de \ 's
dans les données json que json_decode
ne gère pas correctement. Pour résoudre ce problème, vous devez double échapper le \
. C'est ce que j'ai fait.
<?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);
Autres conseils
Votre flux de données échappe aux guillemets simples (apostrophes) avec une barre oblique inverse (p. ex. \ '). La spécification JSON ne dit pas que cela devrait être fait, et donc PHP ne se comporte pas correctement.
Voir: http://bugs.php.net/bug.php?id = 42708
Vous pouvez essayer de remplacer tous les \ 'par':
$json = str_replace('\\\'', "'", $json);
avant d'appeler json_decode.