仅当特定密钥对值与 iterable 匹配时,才在 JSON 对象中获取多个 JSON 密钥对值

Get multiple JSON keypair values within a JSON object only if a specific keypair value matches iterable

我正在尝试从通过 API 调用生成的 JSON 文件中提取任何给定 JSON 对象中的多个 json 键值数据,仅用于 JSON 在键值对中包含特定值的对象;键值对中的这个特定值是通过遍历列表获得的。很难表达,所以让我告诉你:

这是一个列表(代表我的真实列表的假列表)我包含我感兴趣的“键值对中的特定值”:

mylist = ['device1', 'device2', 'device3']

这是我从我的 python 脚本中读取的 json 文件(显然经过了明显删节):

[
    {
        "name": "device12345",
        "type": "other",
        "os_name": "Microsoft Windows 10 Enterprise",
        "os_version": null
    },
    {
        "name": "device2",
        "type": "other",
        "os_name": "Linux",
        "os_version": null
    },
    {
        "name": "device67890",
        "type": "virtual",
        "os_name": "Microsoft Windows Server 2012 R2 Standard",
        "os_version": null
    }
]

我想遍历 mylist,对于 mylist 中与 json 文件中的 json 键值键“name”相匹配的每个项目,打印 'name' 的值和'os_name'。在这种情况下,我应该看到一个结果,在遍历 mylist 之后,device2 匹配包含 {'name':'device2'} 的 json 对象中的 'name' 键,然后打印 'name' 值('device2')和 'os_name' 值('Linux'),然后继续遍历 mylist 以获得下一个值以遍历 json 文件。

我的代码不起作用;让我们假设 json 文件在 python 中正确打开并且定义为 my_json_file 类型为 List:

for i in mylist:
    for key in my_json_file:
        if key == i:
            deviceName = i.get('name')
            deviceOS = i.get('os_name')
            print(deviceName)
            print(deviceOS)

我认为这里的问题是我无法弄清楚如何“识别”json 与我列表中的项目“匹配”的对象,因为 json 对象是“扁平的”(即我的 json 文件中的 'device2' 没有 'name' 和 'os_name' 嵌套在它下面,这将允许我 dict.get('device2')然后检索嵌套数据)。

抱歉,如果我没有清楚地理解您的问题,但看起来您正在尝试从列表而不是 JSON 文件中读取值,因为您正在查看 i.get key.get,而 key 是实际包含信息的内容。

对于优化问题,我建议将您的设备列表转换为一组。然后,您可以遍历 JSON 数组并检查给定名称是否在集合中,而不是以其他方式进行。优点是集合可以 return 如果它们在 O(1) 时间内包含一个项目,这意味着它将显着加快程序的整体速度到 O(n) where n = size of json array.

for key in my_json_file:
    if key.get('name') in my_list:
        deviceName = key.get('name')
        deviceOS = key.get('os_name')
        print(deviceName)
        print(deviceOS)