如何以更通用的方式使用python读取json文件?

时间:2016-11-06 12:40:14

标签: python json

我有一个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的名称和版本。所以,请建议我如何实现这种解决方案,我不提供库的名称,并使其更通用。

3 个答案:

答案 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等相关问题。