2017-03-22 134 views
0

我試圖讀取JSON文件(並最終將內容保存到數據庫中),但運行下面的代碼時出現KeyError錯誤。 See sample JSON供參考。從JSON文件中迭代字典時出現Python KeyError

在JSON文件中所有情況下都不存在密鑰'durationTimeFrom''durationTimeTo'(只有當eventType80時,我認爲)。

如何在嘗試讀取值之前正確識別丟失的密鑰,以及/或者如何爲沒有密鑰的項目插入虛擬密鑰?

我已經搜索了Google/StackOverflow並嘗試使用if key in dict:dict.get(key),但沒有成功。

import json 

source = "feed_traffic.json" # JSON file to process 
data = json.loads(open(source).read()) # Process JSON 

total = data["events"]["totalCount"] 
index = 0 

events = data["events"]["list"][index:total] 

for event in events: 

    eid = event["id"] 
    type = event['eventType'] 
    header = event['headingText'] 
    lat = event['latitude'] 
    long = event['longitude'] 
    created = event['created'] 
    updated = event['updated'] 
    expires = event['expireTime'] 
    validFrom = event['durationTimeFrom'] 
    validTo = event['durationTimeTo'] 
    status = event['status'] 

    # Just to check all is well, out data in console 
    print("Traffic Event", index, ":", eid, "-", type, "-", header, "(", long, ",", lat, ")") 

    index = index+1 
+0

你試過執行錯誤和異常處理嗎? https://docs.python.org/2/tutorial/errors.html – glls

+0

event.get('id')如果密鑰不存在則返回None – Richy

+0

'help(dict.get)'''說''dget k [,d]) - > D [k]如果k在D中,否則爲d。 d默認爲None.'您可以提供您自己的默認值。假設你想讓默認ID爲-1,你可以使用'eid = event.get(「id」,-1)'。 – tdelaney

回答

1

dict.get。這對我來說可以。你應該改變如下。

# before 
validFrom = event['durationTimeFrom'] 
validTo = event['durationTimeTo'] 

# after 
validFrom = event.get('durationTimeFrom') 
validTo = event.get('durationTimeTo') 
+0

謝謝!我不知道我第一次做錯了什麼,但是我得到了同樣的錯誤。這整理出來了。 –