【问题标题】:Error analysing JSON file with Python使用 Python 分析 JSON 文件时出错
【发布时间】:2015-09-29 08:22:40
【问题描述】:

我有一个 JSON 文件(在我的代码中定义为 k),其中包含多个级别,我正在尝试分析并遇到错误,我无法理解。

这是我的代码:

for i in k:
    if 'pens' in k[i]:
    print i+"       "+str(k[i]['pens']['Papermate']['Total Quantity'])

我收到以下错误

KeyError: 'Papermate'

当它达到i 时,pens 根本不在k[i] 中,但在k[i] 中直接有'Papermate'(即不在'pens' 内)。

在这种情况下,我希望它完全跳过 k[i] 并且不打印任何内容。

我该怎么做?

【问题讨论】:

  • 你需要显示 json。通过事物的声音,您试图访问不存在但您的描述不是特别清楚的事物。 Papermate 是在 pens 内还是在 i 内?

标签: python json dictionary


【解决方案1】:

我推荐使用pformat

from pprint import pformat
import json
k = json.load(yourfile.json)
for i in k:
    pformat(i)

pformat 向我们的控制台显示所有数据并检查问题,因为 python 没有检测到 'Papermate' 键。

【讨论】:

    【解决方案2】:

    您所做的看起来应该可以,但这取决于您如何解析 json。这就是我将根据您的描述对其进行编码的方式

    import json
    
    k = json.load(yourfile.json)
    for i in k:
        if 'pens' in i.iterkeys():
            print i+"       "+str(i['pens']['Papermate']['Total Quantity'])
    

    但没有看到实际的json 很难知道。

    【讨论】:

    • 我只希望它打印 pens 内的 Papermates(它同时出现在 pensi 内)。如果我正确阅读了您的代码,这两种情况都会打印出来。它现在工作正常,当它同时存在时(即只打印pens 中的一个)并跳过没有pensi 中没有Papermate 的那些,这就是我想要发生的事情在那些情况下。我得到错误的唯一情况是pens 不存在但Papermate 仍然出现在i 中(在这种情况下我希望它做的是跳过它并且什么都不打印)。谢谢。
    • 对代码进行了轻微编辑并删除了 else 语句,这应该可以工作。
    • 我在第 2 行收到此错误:AttributeError: 'str' object has no attribute 'iterkeys'
    • 你是如何解析 json 的?你能显示json吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多