簡體   English   中英

python ::迭代嵌套的JSON結果

[英]python :: iterate through nested JSON results

迭代JSON results有時會讓人感到困惑。 說我有這樣的function

def get_playlist_owner_ids(query):

    results = sp.search(q=query, type='playlist')
    id_ = results['playlists']['items'][0]['owner']['id']
    return (id_)

我可以獲取id_ ,它可以工作。

但是我如何for i in x循環中使用for i in x進行迭代for i in x所以我return所有ids_

results['playlists']['items'][0]['owner']['id']
                              ^___ this is a list index

從而:

for item in results['playlists']['items']:
    print(item['owner']['id'])

制作中間變量通常很方便,以使事物更具可讀性。

playlist_items = results['playlists']['items']
for item in playlist_items:
    owner = item['owner']
    print(owner['id'])

這是假設我已經根據您所顯示的內容正確猜出了對象的結構。 但是,希望這些示例能夠為您提供一些更好的方法來考慮將復雜結構拆分為有意義的塊。

這個怎么樣? 您可以使用發電機來實現目標

def get_playlist_owner_ids(query):
    results = sp.search(q=query, type='playlist')
    for item in results['playlists']['items']:
        yield item['owner']['id']

你可以迭代results['playlists']['items'] ,或者更好的是,使用列表理解:

def get_playlist_owner_ids(query):

    results = sp.search(q=query, type='playlist')
    return [x['owner']['id'] for x in results['playlists']['items']]

在實踐中,您的文檔是這樣的:

{ "playlists": {
    "items":[
        {"owner":{"id":"1"},...},                 
        {"owner":{"id":"2"},...},
        {"owner":{"id":"3"},...},
        ...,
}

所以你必須循環遍歷項目列表。

你可以做這樣的事情

ids = []
items = results['playlists']['items']
for item in items:
    ids.append(item['owner']['id'])

return ids

或者如果你想要一行:

ids = [item['owner']['id'] for owner in results['playlists']['items']]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM