2011-03-20 5 views
2

J'ai essayé d'utiliser le décodage JSON pour obtenir le flux API youtube. Cependant, quand je colle le résultat JSON dans http://www.jsonlint.com/ J'ai remarqué quelque chose commephp youtube json decode

"media$group": { 
    "media$category": [ 

Malheureusement, certains symboles sont rejetés par php. Voici mon code, j'ai essayé d'enlever ce symbole $, mais peut-être pas le succès. Comment puis-je résoudre ceci?

$url = 'http://gdata.youtube.com/feeds/api/videosq=football&orderby=published&v=2&alt=json'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_REFERER, $url); 
$body1 = curl_exec($ch); 
$body = str_replace('$','', $body1); 
curl_close($ch); 
$data = json_decode($body); 
foreach ($data->feed->entry as $result) { 
... 
} 
+2

'json_decode' est pas affectée par' '$ dans les cordes. Vous vous rendez compte que l'URL indiquée donne une erreur "Invalid request URI"? – mario

+0

@mario, je veux obtenir le mediadescription. si j'ignore '$', utilisez 'echo $ result-> mediagroup-> mediadescription;' il est rappelé 'Catchable fatal error: L'objet de la classe stdClass n'a pas pu être converti en chaîne dans ...' –

Répondre

7

Votre problème est l'utilisation d'identifiants PHP pour accéder au contenu. La ici solution la plus simple serait d'obtenir un tableau au lieu d'un objet:

$data = json_decode ($json , $assoc = true); 

Cela permet d'accéder aux champs avec:

echo $result['media$group']['media$description']; 

Si vous voulez garder la syntaxe d'objet, qui est possible avec cette bidouille :

echo $result->{'media$group'}->{'media$category'}; 

(. Mais les tableaux sont plus en sécurité ici Vous ne recevez pas une erreur fatale en cas de changement de format et les propriétés absents.)

0

Ce travail:

<?php 
$url = 'http://gdata.youtube.com/feeds/api/videos?q=football&orderby=published&v=2&alt=json'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_REFERER, $url); 
$body1 = curl_exec($ch); 
$body = str_replace('$','', $body1); 
curl_close($ch); 
$data = json_decode($body); 

foreach ($data->feed->entry as $result) { 
    var_dump($result); 
} 
?>