2017-09-08 7 views
0

にJSONレスポンスは、ここではサンプルです:だから私は、次の応答(JSONレスポンス)を解析しようとしている利用-dictの

{ 
    "kind": "youtube#searchListResponse", 
    "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/fywkWrox-IkW0v2IWY27RMiWvvA\"", 
    "nextPageToken": "CBQQAA", 
    "regionCode": "IQ", 
    "pageInfo": { 
    "totalResults": 1000000, 
    "resultsPerPage": 20 
    }, 
    "items": [ 
    { 
     "kind": "youtube#searchResult", 
     "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/j0uEstXCXOhrDqDegEBmEeHqsBM\"", 
     "id": { 
     "kind": "youtube#video", 
     "videoId": "YQHsXMglC9A" 
     }, 
     "snippet": { 
     "publishedAt": "2015-10-23T06:54:18.000Z", 
     "channelId": "UComP_epzeKzvBX156r6pm1Q", 
     "title": "Adele - Hello", 
     "description": "'Hello' is taken from the new album, 25, out November 20. http://adele.com Available now from iTunes http://smarturl.it/itunes25 Available now from Amazon ...", 
     "thumbnails": { 
      "default": { 
      "url": "https://i.ytimg.com/vi/YQHsXMglC9A/default.jpg", 
      "width": 120, 
      "height": 90 
      }, 
      "medium": { 
      "url": "https://i.ytimg.com/vi/YQHsXMglC9A/mqdefault.jpg", 
      "width": 320, 
      "height": 180 
      }, 
      "high": { 
      "url": "https://i.ytimg.com/vi/YQHsXMglC9A/hqdefault.jpg", 
      "width": 480, 
      "height": 360 
      } 
     }, 
     "channelTitle": "AdeleVEVO", 
     "liveBroadcastContent": "none" 
     } 
    } 

そして、これは私の解析関数である:

def parse(self): 
     items = self['items'] 
     i = 0 
     for item in items: 
      Data = {str(i): { 
       "id": item['id']['videoId'], 
       "title": item['snippet']['title'], 
       "description": item['snippet']['description'], 
       "thumbnail": item['snippet']['thumbnails']['medium']['url'], 
       "publishedAt": item['snippet']['publishedAt'], 
       "FullURL": "https://www.youtube.com/watch?v=" + item['id']['videoId'] 
      }} 
      i = i +1 
     return Data 

主な問題は、辞書はレスポンスの最後のビットだけを挿入していることです。たとえば、10個の結果を取得していて、最後のレスポンスを返すだけです。どうしたの?

+0

'for'ループの前に' Data'が存在しないため、常に再定義されています。あなたは最終的な化身を「返す」ようになります。 – roganjosh

+0

役に立つ読んでください:http://python-textbok.readthedocs.io/en/1.0/Variables_and_Scope.html – Lescurel

+0

私はそれについて考えましたが、正直なところ、私はそれを修正する方法が全くわかりません。カップルの時間にそれを修正しようとしました –

答えて

0

Dataのループを定義して空の辞書として初期化し、各繰り返しでキー/値のペアを追加します。現在、ループ全体で辞書全体を再定義し続け、1つのエントリを保持します。最終的にはreturnになります。

def parse(self): 
     items = self['items'] 
     Data = {} # Initialise it here 
     for i, item in enumerate(items): # Now you don't need to increment i 
      # Insert your key/value pair 
      Data[str(i)] = { 
       "id": item['id']['videoId'], 
       "title": item['snippet']['title'], 
       "description": item['snippet']['description'], 
       "thumbnail": item['snippet']['thumbnails']['medium']['url'], 
       "publishedAt": item['snippet']['publishedAt'], 
       "FullURL": "https://www.youtube.com/watch?v=" + item['id']['videoId'] 
      } 

     return Data 
関連する問題