我有一个 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/