使用python获取json对象的值

时间:2019-05-09 12:54:36

标签: python json

我的python代码有问题。我已经用python成功合并了多个json文件。每个文件的json代码都在python字典中。当我要使用该数据时,仅显示对象名称而不显示值。

这是将所有json文件的代码添加到python字典中的代码:

result = []
for f in glob.glob("jsons/*.json"):
    with open(f, "rb") as infile:
        result.append(json.load(infile))

之后,我想显示所有json文件中所有报告的所有ID:

for files in result:
        for reports in files["reports"]:
                print reports["id"]

但是我收到错误消息:

Traceback (most recent call last):
  File "app.py", line 71, in <module>
    print reports["id"]
TypeError: string indices must be integers

当我删除[“ id”]时,它将显示所有报告名称(1、2、3,...)的列表,但没有包含对象和值的完整报告。仅报告名称。

这是json代码:

{
    "reports": {
        "1": {
            "id": "123"
        },
        "2": {
            "id": "122"
        },
        "3": {
            "id": "121"
        }
    }
},
{
    "reports": {
        "4": {
            "id": "120"
        },
        "5": {
            "id": "119"
        },
        "6": {
            "id": "118"
        }
    }
},
...

3 个答案:

答案 0 :(得分:1)

for reports in files["reports"]:

files["reports"]是一个字典,并且在字典上进行迭代只会绑定该字典的键,而不会绑定其值。因此reports将是"1",然后是"2"等。

如果希望将reports绑定到{"id": "123"}字典值而不是字符串键,请使用values方法进行指定:

for reports in files["reports"].values():

答案 1 :(得分:1)

这些是lists,而不是数组。

无论如何,我们有一个list嵌套的dicts,并且我们想要获取与最里面的id中的dicts键对应的所有值。

您可以通过list理解来做到这一点,如下所示:

[v['id'] for file in files for v in file['reports'].values()]

答案 2 :(得分:0)

与先前的答案相关,您的json转换为字典,其他json格式也如下所示。添加“值”方法或将迭代更改为(python3)

for files in result:
  for k,v in results.items():
   print(k, v) 


JSON------ PYTHON

对象----- dict
阵列-----列表
字符串----- unicode
number(int)----- int,long