2017-04-02 3 views
0

私はYoutube APIが返すJSONを解析しようとしています。私はPHPでJSONを解析する方法を理解する上で頭を悩ませています。私はそれを理解できないようです。PHPのJSONで角括弧の外側のデータを解析する

これは、基本的にはAPIの出力です:

{ 
"kind": "youtube#channelListResponse", 
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/mgiCAEvrnAFhKSCga80wVfAbUtc\"", 
"pageInfo": { 
    "totalResults": 1, 
    "resultsPerPage": 1 
}, 
"items": [ 
    { 
    "kind": "youtube#channel", 
    "etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/cndol6pHIKmkRCizokwycOOUr2E\"", 
    "id": "SWMb9NxQL9I6c", 
    "snippet": { 
    "title": "Koffee With Karan", 
    "description": "Catch Karan Johar chat up Bollywood, secrets revealed and stories told , that's how the world will remember Koffee with Karan", 
    "thumbnails": { 
    "default": { 
     "url": "https://i.ytimg.com/sh/554333074/showposter_thumb.jpg" 
    }, 
    "medium": { 
     "url": "https://i.ytimg.com/sh/554333074/showposter.jpg" 
    }, 
    "high": { 
     "url": "https://i.ytimg.com/sh/554333074/showposter_hq.jpg" 
    } 
    } 
    } 
    } 
] 
} 

私は何を取得したいことは、「スニペット」のほとんどすべてで、私はタイトル、説明、サムネイルを必要とします。

$getjson = file_get_contents('https://www.googleapis.com/youtube/v3/channels?part=snippet&id=SWMb9NxQL9I6c&key=mykey'); 
$data = json_decode($getjson,true); 

echo $data['items'][0]['snippet'][0]['title']; 

かさえ、私はどのように説明する多数の記事を見つけたが、何も仕事や意味をなすように思わない

echo $data['items']->snippet->title; 

のようなものをしよう:私はこのようにアクセスしようとしてきました。まず第一に、 "items"データは最初の{}の括弧の外にあります。私は本当に何も見つけられませんでした。

どのようなヘルプや主な説明は素晴らしいです。私はこの物にアクセスするのに必要な構文を理解したい。

+0

閉じる...スニペットは、配列が、オブジェクトではありませんので、あなたはしないでください'[snippet '] [0] [' title ']' just '[' snippet '] [' title ']' – Augwa

答えて

3

あなたはほぼそこにいます。試してみてください。$data['items'][0]['snippet']['title']

  1. json_decode(..., true)trueassociative arrayを返します。
  2. []を使用して配列値にアクセスします。 {}手段で
  3. ものは、あなたが[0][1]

これは良い説明はないようindexものを使用してアクセスすることができます[]にキー、['snippet'] &何かのようなものを使用してアクセスすることができます。それがいくらか理解できることを願っています。

+0

'json_decode'の2番目のパラメータを' true'として使うと、出力はオブジェクトではなく配列になります。 –

+0

@AmirZojajiマニュアルから 'TRUEの場合、返されるオブジェクトは連想配列に変換されます。 '私は 'true'がオブジェクトに配列に変換されると確信しています。私が間違っている場合私を修正してください –

+0

ああ、素晴らしい!私はすでにtrueを追加すると配列として返すことを知っていました。 '$ data ['items'] [0] ['snippet'] [0] ['title']'を使用する前に、未知のインデックス0が残っていたので、そこの最初の0だったと思いました。 @AmirZojajiにも多くの感謝! – s1h4d0w

0

itemsには配列値がありますが、snippetは構造体ではありません。だから、使用する必要があります。

echo $data->items[0]->snippet->title; 

またはあなたが書くことができますtrueとしてjson_decodeの2番目のパラメータを持っている場合:

echo $data['items'][0]['snippet']['title']; 
+0

答えをありがとう、私は今それを得る! – s1h4d0w

関連する問題