从另一个包含不同键/值的对象中选择一个JSON键

时间:2018-07-20 11:13:20

标签: python json python-3.x

我有以下JSON数据:

[
    {
        "urls": [
            "outlook.office.com",
            "outlook.office365.com"
        ],
        "ips": [
            "192.168.0.0/16"
        ]
    },
    {
        "urls": [
            "*.mail.protection.outlook.com"
        ],
        "ips": [
            "172.16.0.0/12"
        ]
    },
    {
        "urls": [
            "r1.res.office365.com",
            "r3.res.office365.com",
            "r4.res.office365.com",
            "xsi.outlook.com"
        ],
    }
]

我想提取与“ * .mail.protection.outlook.com” URL相关的所有IP地址。

我当前拥有的代码是:

import json

with open('ips.json') as i:
    ip = json.load(i)

for urls in ip:
        print(urls["ips"])

为每个对象打印“ ips”数组的所有成员,但是我只希望包含以下内容的对象中的数组:

[ { urls: [ "*.mail.protection.outlook.com" ] } ]

最好使用纯Python(没有非标准库)解决方案,以简化向AWS Lambda的部署

1 个答案:

答案 0 :(得分:1)

简单的loop语句。

import json

with open('demo.json') as i:
    datas = json.load(i)

ips = []

search_url = "*.mail.protection.outlook.com"

for data in datas:
    if 'urls' in data:
        if search_url in data['urls']:
            if 'ips' in data:
                ips.extend(data['ips'])

print(ips)

输出

['172.16.0.0/12']