2017-03-17 68 views
0

行..我其實是如此努力通過自己想出解決辦法,但我似乎無法弄清楚。我不斷收到KeyError異常:「數據」巨蟒

我試圖訪問一個JSON文件,並打印出一些東西,我想。

我想要訪問的網址是: https://www.reddit.com/user/clockwork8.json

所以這裏的交易

我現在所擁有的:

import urllib, json, unicodedata 

username1 = raw_input('Username: ') 
url1 = "https://www.reddit.com/user/clockwork8" 
response = urllib.urlopen(url1) 
data = json.loads(response.read()) 

在代碼的頂部,和我嘗試了以下兩種選擇:

for number in data["data"]["children"]: 
    for fordata in data["data"]["children"][number]: 
     if fordata == "data": 
      for key in data["data"]["children"][post][fordata]: 
       if key == "score": 
        print data["data"]["children"][post]["data"][key].encode('ascii') 
       if key == "link_url": 
        print data["data"]["children"][post]["data"][key].encode('ascii') 

其中給我這個錯誤:

for fordata in data["data"]["children"][number]: 
TypeError: list indices must be integers, not dict 

所以,我想這一點:

for a in range(len(data['data']['children'])): 
    print data['data']['children'][a]['data']['score'].encode('ascii') 

,現在它給了我這個錯誤:

for a in range(len(data['data']['children'])): 
KeyError: 'data' 

任何想法是什麼問題..?

+0

在'data'你要哪些對象?使用你的代碼我得到'25'的結果 – davedwards

+0

也許你想在數據['data'] ['children']]中打印d ['data'] ['score']爲d?給出25'scores':[3, 1, 2, 1, 0, 2, 1, 0, -3, 9, 1, 3, 2, 2, 4, 2, 1, 2, 16, -1, 58, 3, 1, 0, -18] – davedwards

回答

0

看起來像你想從json對象中的所有得分。

data['data']['children']中的每個對象都有一個data密鑰,所以我們需要在每個對象上調用data。此外,爲了讓每個那些data'score'價值,我們需要調用它的[data][score]

使用for -loop喜歡你:

for d in data['data']['children']: 
    print d['data']['score'] 

將打印各'score'一次一個,或

scores = [d['data']['score'] for d in data['data']['children']] 

:您可以使用Python的列表中理解語法,這給了我們一個班輪獲取列表中的所有'scores' 0現在包含25個值的列表:

[3, 1, 2, 1, 0, 2, 1, 0, -3, 9, 1, 3, 2, 2, 4, 2, 1, 2, 16, -1, 58, 3, 1, 0, -18] 

希望這會有所幫助。

+0

我真的不知道,如果是我的電腦出了問題,但我把你的代碼完全複製了,wi包含導入和url的代碼的頂端位置,但仍然有一個錯誤消息... scores = [d ['data'] ['score'] for data in data ['data'] ['children']] KeyError:'data' – chemo

+0

哦,對不起,是的,你是對的......你需要在網址中加入'.json':'url1 =「https://www.reddit.com/user/clockwork8.json 「';並使用'json.load'方法,而不是'loads':'data = json.load(response)' – davedwards

+0

好的非常感謝!你能解釋一下你的代碼的格式是什麼..?是否遍歷data ['data'] ['children']中的['data'] ['score']的每個實例? – chemo