2017-03-22 6 views
0

JSON 파일을 읽고 (결국 내용을 데이터베이스에 저장하려고합니다.) 아래 코드를 실행하면 KeyError가 발생합니다. 참조 용으로 See sample JSON.JSON 파일에서 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. 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

감사합니다! 처음에는 내가 뭘 잘못했는지 모르지만 같은 오류가 발생했습니다. 이것은 그것을 분류했다. –