【发布时间】:2022-06-11 21:25:38
【问题描述】:
我是 python 新手,我正在使用 python 3.9.13 尝试从 json 文件中的现有键中提取值。
我知道json.load() 函数输出一个字典,所以在我的代码的最后一部分我在字典中搜索。
这是我的python代码:
import os
import json
with open('./output.json', 'r') as f:
data = json.load(f)
values= []
if "created" in data:
print("Key found!")
print ("Version: ", data["version"], "created at: ", data["created"])
values.append(data["version"])
print(values)
这是我正在读取的 output.json 文件:
{
"section1": [
{
"name": "name1",
"version": "1.0.0",
"description": "",
"apiVersion": "v2",
"appVersion": "1.0.22",
"type": "application",
"created": "2022-05-03T11:20:45Z"
},
{
"name": "name1",
"version": "1.0.1",
"description": "",
"apiVersion": "v2",
"appVersion": "1.0.22",
"type": "application",
"created": "2022-04-20T13:55:16Z"
}
],
"section2": [
{
"name": "name2",
"version": "2.0.0",
"description": "",
"apiVersion": "v2",
"appVersion": "1.0.17",
"type": "application",
"created": "2022-01-25T07:58:09Z"
},
{
"name": "name2",
"version": "2.0.1",
"description": "",
"apiVersion": "v2",
"appVersion": "1.0.17",
"type": "application",
"created": "2022-01-18T07:08:38Z"
}
]
}
我希望我的数组 values 是:
[1.0.0, 1.0.1, 2.0.0, 2.0.1]
但是我的输出是一个空数组,我不知道为什么。
非常感谢您的帮助!
【问题讨论】:
-
print
data你会发现它是一个字典,其键映射到一个列表,其中包含一个以version为键的字典。相应地调整您的代码。 -
data是外部字典,使用"section1"之类的键,您必须遍历外部字典中的值,这是您的内部字典,然后您可以像values.append(inner["version"]) -
只是为了澄清,
created键有什么意义吗?也就是说,您似乎只关心version键的值,您是否还需要检查created键是否存在? -
如果您的期望值
[1.0.0, 1.0.1, 2.0.0, 2.0.1]那么为什么这些打印声明print("Key found!") print ("Version: ", data["version"], "created at: ", data["created"]) values.append(data["version"])。最简单的在线shell脚本是for i in 1 2; do cat output.json | jq .section$i[].version ; done
标签: python json python-3.x