我的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"
}
}
},
...
答案 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)
对象----- dict
阵列-----列表
字符串----- unicode
number(int)----- int,long