python - 删除某些键具有空值的 JSON 对象

标签 python json

我有一个 json 如下:

[{
        "Domain": "google.com",
        "A": ["172.217.22.46"],
        "AAAA": ["2a00:1450:4001:81e::200e"],
        "CAA": ["0 issue \"pki.goog\""],
        "MX": ["20 alt1.aspmx.l.google.com.", "30 alt2.aspmx.l.google.com.", "10 aspmx.l.google.com.", "40 alt3.aspmx.l.google.com.", "50 alt4.aspmx.l.google.com."],
        "NS": ["ns1.google.com.", "ns3.google.com.", "ns2.google.com.", "ns4.google.com."],
        "SOA": ["ns1.google.com. dns-admin.google.com. 189483475 900 900 1800 60"],
        "TXT": ["\"docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e\"", "\"v=spf1 include:_spf.google.com ~all\""],
        "Country": ["United States"],
        "Hostname": ["'fra15s16-in-f46.1e100.net'"],
        "SSL": ["Google Internet Authority G2"],
        "WHOIS": [8400],
        "TTL": ["24"]
    }, {
        "Domain": "",
        "NS": ["a.root-servers.net.", "h.root-servers.net.", "g.root-servers.net.", "i.root-servers.net.", "d.root-servers.net.", "k.root-servers.net.", "c.root-servers.net.", "l.root-servers.net.", "e.root-servers.net.", "m.root-servers.net.", "f.root-servers.net.", "j.root-servers.net.", "b.root-servers.net."],
        "SOA": ["a.root-servers.net. nstld.verisign-grs.com. 2018031700 1800 900 604800 86400"],
        "A": [],
        "SSL": ["None"],
        "WHOIS": [0],
        "TTL": [null]
    }, {
        "Domain": "facebook.com",
        "A": ["157.240.20.35"],
        "AAAA": ["2a03:2880:f11c:8183:face:b00c:0:25de"],
        "MX": ["10 msgin.vvv.facebook.com."],
        "NS": ["a.ns.facebook.com.", "b.ns.facebook.com."],
        "SOA": ["a.ns.facebook.com. dns.facebook.com. 1521364737 14400 1800 604800 300"],
        "TXT": ["\"v=spf1 redirect=_spf.facebook.com\""],
        "Country": ["United States"],
        "Hostname": ["'edge-star-mini-shv-02-frt3.facebook.com'"],
        "SSL": ["DigiCert SHA2 High Assurance Server CA"],
        "WHOIS": [10227],
        "TTL": ["173"]
    }]

请注意第二个元素,即具有 "Domain": "" 的元素,我想删除它(可能有多个实例 "Domain": "" 就像那样,这只是部分 JSON)并返回一个没有整个对象的有效 json,因此输出必须如下所示:

[{
        "Domain": "google.com",
        "A": ["172.217.22.46"],
        "AAAA": ["2a00:1450:4001:81e::200e"],
        "CAA": ["0 issue \"pki.goog\""],
        "MX": ["20 alt1.aspmx.l.google.com.", "30 alt2.aspmx.l.google.com.", "10 aspmx.l.google.com.", "40 alt3.aspmx.l.google.com.", "50 alt4.aspmx.l.google.com."],
        "NS": ["ns1.google.com.", "ns3.google.com.", "ns2.google.com.", "ns4.google.com."],
        "SOA": ["ns1.google.com. dns-admin.google.com. 189483475 900 900 1800 60"],
        "TXT": ["\"docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e\"", "\"v=spf1 include:_spf.google.com ~all\""],
        "Country": ["United States"],
        "Hostname": ["'fra15s16-in-f46.1e100.net'"],
        "SSL": ["Google Internet Authority G2"],
        "WHOIS": [8400],
        "TTL": ["24"]
    }, {
        "Domain": "facebook.com",
        "A": ["157.240.20.35"],
        "AAAA": ["2a03:2880:f11c:8183:face:b00c:0:25de"],
        "MX": ["10 msgin.vvv.facebook.com."],
        "NS": ["a.ns.facebook.com.", "b.ns.facebook.com."],
        "SOA": ["a.ns.facebook.com. dns.facebook.com. 1521364737 14400 1800 604800 300"],
        "TXT": ["\"v=spf1 redirect=_spf.facebook.com\""],
        "Country": ["United States"],
        "Hostname": ["'edge-star-mini-shv-02-frt3.facebook.com'"],
        "SSL": ["DigiCert SHA2 High Assurance Server CA"],
        "WHOIS": [10227],
        "TTL": ["173"]
}]

这是我尝试过的(这个例子是可执行的):

import json

if __name__ == "__main__":

    json_data = "[{\r\n\t\t\"Domain\": \"google.com\",\r\n\t\t\"A\": [\"172.217.22.46\"],\r\n\t\t\"AAAA\": [\"2a00:1450:4001:81e::200e\"],\r\n\t\t\"CAA\": [\"0 issue \\\"pki.goog\\\"\"],\r\n\t\t\"MX\": [\"20 alt1.aspmx.l.google.com.\", \"30 alt2.aspmx.l.google.com.\", \"10 aspmx.l.google.com.\", \"40 alt3.aspmx.l.google.com.\", \"50 alt4.aspmx.l.google.com.\"],\r\n\t\t\"NS\": [\"ns1.google.com.\", \"ns3.google.com.\", \"ns2.google.com.\", \"ns4.google.com.\"],\r\n\t\t\"SOA\": [\"ns1.google.com. dns-admin.google.com. 189483475 900 900 1800 60\"],\r\n\t\t\"TXT\": [\"\\\"docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e\\\"\", \"\\\"v=spf1 include:_spf.google.com ~all\\\"\"],\r\n\t\t\"Country\": [\"United States\"],\r\n\t\t\"Hostname\": [\"'fra15s16-in-f46.1e100.net'\"],\r\n\t\t\"SSL\": [\"Google Internet Authority G2\"],\r\n\t\t\"WHOIS\": [8400],\r\n\t\t\"TTL\": [\"24\"]\r\n\t}, {\r\n\t\t\"Domain\": \"\",\r\n\t\t\"NS\": [\"a.root-servers.net.\", \"h.root-servers.net.\", \"g.root-servers.net.\", \"i.root-servers.net.\", \"d.root-servers.net.\", \"k.root-servers.net.\", \"c.root-servers.net.\", \"l.root-servers.net.\", \"e.root-servers.net.\", \"m.root-servers.net.\", \"f.root-servers.net.\", \"j.root-servers.net.\", \"b.root-servers.net.\"],\r\n\t\t\"SOA\": [\"a.root-servers.net. nstld.verisign-grs.com. 2018031700 1800 900 604800 86400\"],\r\n\t\t\"A\": [],\r\n\t\t\"SSL\": [\"None\"],\r\n\t\t\"WHOIS\": [0],\r\n\t\t\"TTL\": [null]\r\n\t}, {\r\n\t\t\"Domain\": \"facebook.com\",\r\n\t\t\"A\": [\"157.240.20.35\"],\r\n\t\t\"AAAA\": [\"2a03:2880:f11c:8183:face:b00c:0:25de\"],\r\n\t\t\"MX\": [\"10 msgin.vvv.facebook.com.\"],\r\n\t\t\"NS\": [\"a.ns.facebook.com.\", \"b.ns.facebook.com.\"],\r\n\t\t\"SOA\": [\"a.ns.facebook.com. dns.facebook.com. 1521364737 14400 1800 604800 300\"],\r\n\t\t\"TXT\": [\"\\\"v=spf1 redirect=_spf.facebook.com\\\"\"],\r\n\t\t\"Country\": [\"United States\"],\r\n\t\t\"Hostname\": [\"'edge-star-mini-shv-02-frt3.facebook.com'\"],\r\n\t\t\"SSL\": [\"DigiCert SHA2 High Assurance Server CA\"],\r\n\t\t\"WHOIS\": [10227],\r\n\t\t\"TTL\": [\"173\"]\r\n\t}]"
    ds = json.loads(json_data)
    # cleaning empty entries
    for item in ds:
        try:
            if item["Domain"]:
                del item["Domain"]
        except KeyError:
            print("Key doesn't exist")
    print(ds)

但是,我无法实现我的目标。如何做到这一点? 谢谢!

最佳答案

[dom for dom in ds if dom.get('Domain')]

使用列表理解来选择所有对“域”具有非假值的字典。

关于python - 删除某些键具有空值的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49366548/

相关文章:

python - 在 scipy.signal 中使用 nan 值去趋势化数据

python - 如何根据其他两列有条件地创建新的 pandas DF 列

python - 如何保护python源代码并将其编译成.so库?

javascript - Socrata Consumerfinance.gov 投诉数据库 API JSON 解析

ios - 快速获取 json 响应中的计数(项目数)

ios - 如何在 SwiftyJSON 中解析数组和数组数组?

c# - 无法使用他们的 API 在 Pinterest 上发布

javascript - AngularJS 更新 JSON 文件

python - 在循环中使用 SQLAlchemy Session 对象提交数据时出现问题

python - Django 更新 View : define fields dynamically via function instead of a member variable