2011-09-02 1 views
0

YouTube에서 반환 된 JSON 배열을 구문 분석하고 있습니다. 그러는 동안 반환하는 항목의 내용으로 새 배열을 만들었습니다. 그런 다음 배열을 foreach 루프에 넣고 필요한 정보에 액세스하려고합니다. 내가 이것을 할 때 echo $d->title->typetext (이것은 가치가있다)을 출력하지만, 비디오의 제목을 얻으 려 할 때 $d->title->$t이 작동하지 않는다. 다음은 내가 작업하고있는 결과물입니다. 이 배열에서 필요한 정보의 두 부분은 이전에 언급 한 비디오의 제목이고 iPhone에 배포하는 데 사용 된 URL 인 $d->media$group->media$content->url입니다.YouTube에서 돌아 오는 JSON 배열의 요소에 액세스 할 수없는 이유는 무엇입니까?

[{"id":{"$t":"http:\/\/gdata.youtube.com\/feeds\/api\/videos\/jPF1JA6n054"},"published":{"$t":"2010-09-21T17:36:05.000Z"},"updated":{"$t":"2011-08-18T16:43:57.000Z"},"category":[{"scheme":"http:\/\/schemas.google.com\/g\/2005#kind","term":"http:\/\/gdata.youtube.com\/schemas\/2007#video"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/categories.cat","term":"Music","label":"Music"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"Back"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"Pocket"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"Memory"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"Back Pocket Memory"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"guitar"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"vocals"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"Awesome"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"drums"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"bass"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"amazing band"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"amazing guitar"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"fun"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"funny"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"cats"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"cute puppies"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"Obama"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"star wars"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"gaga"},{"scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat","term":"sexy"}],"title":{"$t":"Back Pocket Memory : 'Bergerac' Official Music Video","type":"text"},"content":{"$t":"Our official music video for the single from our album, 'Strangers'. Made by our amazing friends at 18mm Productions. Check them out at: www.18mmproductions.com. youtube.com\/18mmproductions, and Twitter: @18mmproductions. Enjoy the video, we are proud to see all of your lovely faces in it!","type":"text"},"link":[{"rel":"alternate","type":"text\/html","href":"http:\/\/www.youtube.com\/watch?v=jPF1JA6n054&feature=youtube_gdata"},{"rel":"http:\/\/gdata.youtube.com\/schemas\/2007#video.responses","type":"application\/atom+xml","href":"http:\/\/gdata.youtube.com\/feeds\/api\/videos\/jPF1JA6n054\/responses"},{"rel":"http:\/\/gdata.youtube.com\/schemas\/2007#video.related","type":"application\/atom+xml","href":"http:\/\/gdata.youtube.com\/feeds\/api\/videos\/jPF1JA6n054\/related"},{"rel":"http:\/\/gdata.youtube.com\/schemas\/2007#mobile","type":"text\/html","href":"http:\/\/m.youtube.com\/details?v=jPF1JA6n054"},{"rel":"self","type":"application\/atom+xml","href":"http:\/\/gdata.youtube.com\/feeds\/api\/videos\/jPF1JA6n054"}],"author":[{"name":{"$t":"BackPocketMemory"},"uri":{"$t":"http:\/\/gdata.youtube.com\/feeds\/api\/users\/backpocketmemory"}}],"gd$comments":{"gd$feedLink":{"href":"http:\/\/gdata.youtube.com\/feeds\/api\/videos\/jPF1JA6n054\/comments","countHint":19}},"media$group":{"media$category":[{"$t":"Music","label":"Music","scheme":"http:\/\/gdata.youtube.com\/schemas\/2007\/categories.cat"}],"media$content":[{"url":"http:\/\/www.youtube.com\/v\/jPF1JA6n054?f=videos&app=youtube_gdata","type":"application\/x-shockwave-flash","medium":"video","isDefault":"true","expression":"full","duration":244,"yt$format":5},{"url":"rtsp:\/\/v8.cache3.c.youtube.com\/CiILENy73wIaGQme06cOJHXxjBMYDSANFEgGUgZ2aWRlb3MM\/0\/0\/0\/video.3gp","type":"video\/3gpp","medium":"video","expression":"full","duration":244,"yt$format":1},{"url":"rtsp:\/\/v7.cache5.c.youtube.com\/CiILENy73wIaGQme06cOJHXxjBMYESARFEgGUgZ2aWRlb3MM\/0\/0\/0\/video.3gp","type":"video\/3gpp","medium":"video","expression":"full","duration":244,"yt$format":6}],"media$description":{"$t":"Our official music video for the single from our album, 'Strangers'. Made by our amazing friends at 18mm Productions. Check them out at: www.18mmproductions.com. youtube.com\/18mmproductions, and Twitter: @18mmproductions. Enjoy the video, we are proud to see all of your lovely faces in it!","type":"plain"},"media$keywords":{"$t":"Back, Pocket, Memory, Back Pocket Memory, guitar, vocals, Awesome, drums, bass, amazing band, amazing guitar, fun, funny, cats, cute puppies, Obama, star wars, gaga, sexy"},"media$player":[{"url":"http:\/\/www.youtube.com\/watch?v=jPF1JA6n054&feature=youtube_gdata_player"}],"media$thumbnail":[{"url":"http:\/\/i.ytimg.com\/vi\/jPF1JA6n054\/0.jpg","height":360,"width":480,"time":"00:02:02"},{"url":"http:\/\/i.ytimg.com\/vi\/jPF1JA6n054\/1.jpg","height":90,"width":120,"time":"00:01:01"},{"url":"http:\/\/i.ytimg.com\/vi\/jPF1JA6n054\/2.jpg","height":90,"width":120,"time":"00:02:02"},{"url":"http:\/\/i.ytimg.com\/vi\/jPF1JA6n054\/3.jpg","height":90,"width":120,"time":"00:03:03"}],"media$title":{"$t":"Back Pocket Memory : 'Bergerac' Official Music Video","type":"plain"},"yt$duration":{"seconds":"244"}},"gd$rating":{"average":4.9322033,"max":5,"min":1,"numRaters":59,"rel":"http:\/\/schemas.google.com\/g\/2005#overall"},"yt$statistics":{"favoriteCount":"42","viewCount":"4813"}}]} 
+0

:

$d->title->{'$t'} 

대안보다 쉽게 ​​액세스 구문을하게 배열로 JSON을 디코딩하는 것입니다, 당신이이 모호 할 필요가 이름 "$의 t"와 속성에 액세스하려면 '[달러 기호를 사용하여 PHP 객체에 노드 이름으로 액세스] (http://stackoverflow.com/questions/4378807/access-a-php-object-with-dollar-sign-as-node-name) 복제본을 만들 수 있습니다. – mario

답변

3

$는 PHP 변수 이름에 유효한 문자가 아닙니다. 당신의 JSON 파서가 연관 배열을 반환하는 경우,이 시도 :

$d['title']['$t'] 

을 파서가 작동하지 않습니다 다음 개체를 반환합니다. 당신은 JSON 키 $을 포함하는 모든 이름을 포함하는 유효한 PHP 변수 이름없는 문자를 포함 할 때마다이 구문을 사용해야합니다

$d->title->{'$t'} 

:이 경우,이 해결 방법을 시도합니다.

+0

{$ t}을 (를) 사용해 보았지만 작동하지 않았습니다. 위의 질문에있는 주석 섹션에서 코드를 볼 수 있습니다. –

+2

당신이 그것을 인용하지 않았기 때문입니다. {{$ t}}가 아닌'{ '$ t'}'를 사용하십시오. 그들은 다르다. – cdhowie

+0

빠른 응답 주셔서 감사합니다,이 사이트에서 지원을 사랑해, 너희들이 최고야. –

3

$d->title->$t은 가변 변수 (이 경우 가변 속성)를 사용하려고합니다.

$d = json_decode($string, true); 
echo $d['title']['$t']; 
+0

$ data = json_decode ($ json_formatted); foreach ($ data as $ d) { $ info = $ d-> feed-> entry; } foreach ($ info as $ i) { echo $ i-> title -> {$ t}; echo $ i-> media $ group-> media $ content-> type. "
"; } –

+0

내 PHP 페이지가 어떻게 보이는지 알 수 있도록 일부 코드를 게시하십시오. JSON을 디코딩하려고 시도했을뿐만 아니라 {$ t} –

+2

@ CA를 시도했습니다 :'$ i-> title {$ t}'의'$ t'는 따옴표로 묶어야합니다 :'$ i-> title { ' $ t '}'. 따옴표를 생략하면 작동하지 않습니다. '$ t' 변수에 이름이 들어있는 멤버에 접근을 시도합니다. – cdhowie