2010-06-11 4 views
0

J'ai un ensemble de données qui ressemble à ceci lorsque vous utilisez print_r ($ var):Besoin d'aide Décodage JSON XML

cbfunc({"query":{"count":"12","created":"2010-06-11T01:20:19Z","lang":"en-US"},"results":["\n 238.l.739089.t.4<\/team_key>\n 4<\/team_id>\n CHEE-HOO!!!<\/name>"]}); 

Il ressemble à JSON pour moi, donc je l'ai essayé d'utiliser json_decode mais ne peut pas le faire correctement. Mon but est d'imprimer les données xml trouvées dans les "résultats".

Tous les pointeurs utiles seraient grandement appréciés.

+1

C'est JSONP (JSON avec Rembourrage). –

+0

Y a-t-il une raison pour que vous obteniez la réponse JSONP-X de YQL plutôt que le simple JSON ou XML? – salathe

+0

@salathe Je ne sais pas exactement pourquoi j'obtiens cette réponse. J'utilise http://github.com/joechung/oauth_yahoo pour mes appels yql. Cependant, vous avez un oeil très vif pour connaître son yql! :) – brant

Répondre

1

Merci à la réponse de ZZ Coder, je me suis la solution

Selon un comment on the json function at PHP le JSONP doit être converti en JSON (sans rembourrage.) via un preg_replac pratique e ...

$var=preg_replace('/.+?({.+}).+/','$1',$var); 

Ensuite, le JSON peut être analysé pour imprimer les données de résultats:

$obj = json_decode($var, true); 
print $obj["results"][0]; 
1

Il semble qu'il soit enveloppé dans un rappel cbfunc. Vous devez donc l'enlever avant de pouvoir lancer json_decode.

essayer

$decode_this = substr($var, 6, -1); 

Vous ne présentez pas la fin de l'responseText mais l'extrait ci-dessus devrait vous donner tout entre le début de la fonction de rappel « cbfunc (» et le dernier char, exclusif. Vous devrez peut-être changer à -2 s'il y a aussi un;. etc.

+0

Merci pour votre réponse. J'ai essayé ce que tu as suggéré mais je n'ai toujours pas eu de chance. Bien que j'ai trouvé une solution pour convertir JSONP en JSON: $ var = preg_replace ('/.+?({.+}).+/','$ 1', $ var); – brant