2017-03-22 2 views
0

JSONファイルを読み込み(そして最終的には内容をデータベースに保存しようとしていますが)、以下のコードを実行するとKeyErrorが発生します。参照のためSee sample JSONJSONファイルからdictを反復するときのPython KeyError

'durationTimeFrom''durationTimeTo'はJSONファイル内のすべての場合には存在しないキー(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)'は 'D.get( k [、d]) - > D [k](Dがkの場合)、そうでなければ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

ありがとう!私は初めて何が間違っているのか分からないが、同じエラーが出ていた。これでソートされました。 –

関連する問題