我有一个json文件如下:
{
"Alib": {
"depends": null,
"locked": false,
"stage": "xyz",
"version": "1.2.3"
}
"Blib": {
"depends": null,
"locked": false,
"stage": "abc",
"version": "4.3.8"
}
"clib": {
"depends": null,
"locked": false,
"stage": "def",
"version": "5.2.6"
}
}
现在我想以一种方式读取这个json文件,我得到了lib名称和关于该lib的版本。目前我的解决方案如下:
with open (jsonfile) as data_file:
file = json.load(data_file)
print file["alib"]["version"]
print file["blib"]["version"]
print file["clib"]["version"]
我确实得到了每个lib版本的详细信息,但这并不是我想要的。 我不想提供硬编码到代码中的lib的名称。它应该是这样的:
with open (jsonfile) as data_file:
file = json.load(data_file)
print file[lib]["version"]
我可以独立获取lib的名称和版本。所以,请建议我如何实现这种解决方案,我不提供库的名称,并使其更通用。
答案 0 :(得分:2)
将json存储到变量" file"后,您可以遍历它以打印每个元素。
for lib in file:
print lib, file[lib]["version"]
答案 1 :(得分:1)
您的json文件已加载为dict
。每个键都是库名,值为dict
:
import json
import io
content = '''\
{
"Alib": {
"depends": null,
"locked": false,
"stage": "xyz",
"version": "1.2.3"
},
"Blib": {
"depends": null,
"locked": false,
"stage": "abc",
"version": "4.3.8"
},
"clib": {
"depends": null,
"locked": false,
"stage": "def",
"version": "5.2.6"
}
}'''
fp = io.BytesIO(content) # can be a real file
json_obj = json.load(fp)
您可以显示如下的库版本:
for lib, attrs in json_obj.items():
print(u"{lib}: version={version}".format(lib=lib, version=attrs["version"]))
你得到:
Alib: version=1.2.3
Blib: version=4.3.8
clib: version=5.2.6
答案 2 :(得分:0)
.keys()
功能应该派上用场。
with open (jsonfile) as data_file:
file = json.load(data_file)
for key in file.keys():
print file[key]["version"]
有关详细信息,请参阅python JSON only get keys in first level等相关问题。