2011-03-20 7 views
2

YouTube API 피드를 가져 오기 위해 JSON 디코딩을 사용하려고했습니다. 내가 http://www.jsonlint.com/에서 JSON 결과를 붙여 넣을 때 그러나, 나는 불행하게도 일부 기호는 PHP에 의해 거부php youtube json decode

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

같은 것을 발견했습니다. 여기 내 코드가 있는데,이 $ 심볼을 제거하려고했으나 성공하지 못했습니다. 어떻게 해결할 수 있습니까?

$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'는 문자열에서'$'의 영향을받지 않습니다. 표시된 URL에 '잘못된 요청 URI'오류가 표시됩니다. – mario

+0

@mario, 전 mediadescription을 원합니다. '$'를 무시하면'echo $ result-> mediagroup-> mediadescription;을 사용하여'Catchable fatal error : 클래스 stdClass의 객체를 문자열로 변환 할 수 없습니다. ' –

답변

7

문제는 PHP 식별자를 사용하여 내용에 액세스하는 것입니다.

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

당신이 개체 구문을 유지하려면, 즉이 kludge로 가능합니다 :

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

이있는 필드에 액세스 할 수 있습니다 : 가장 간단한 해결책은 여기에 대신 객체의 배열을 얻을 것 :

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

(. 그러나 배열은 여기에 안전하다 당신은 형식의 변화와 특성이 존재해야 치명적인 오류가 발생하지 않습니다.)

0

이 작품은 :

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