【问题标题】:Python KeyError when iterating dict from JSON-file从 JSON 文件迭代 dict 时出现 Python KeyError
【发布时间】:2017-03-22 16:29:47
【问题描述】:

我正在尝试读取 JSON 文件(并最终将内容保存到数据库中),但在运行以下代码时出现 KeyError。 See sample JSON供参考。

'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

【问题讨论】:

  • 您是否尝试过实现错误和异常处理? docs.python.org/2/tutorial/errors.html
  • event.get('id') 如果键不存在则返回 None
  • help(dict.get)D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. 您可以提供自己的默认值。假设您希望默认 id 为 -1,您将eid = event.get("id", -1)
  • @glls 是的,这是我的下一步 ;-) 感谢输入

标签: python json dictionary keyerror


【解决方案1】:

dict.get。这对我来说可以。你应该改变如下。

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

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

【讨论】:

  • 谢谢!我不知道我第一次做错了什么,但我得到了同样的错误。这样就解决了。
猜你喜欢
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多