Ich habe eine Liste namens filelist = [] , an die ich ein Wörterbuch von einigen Schlüssel-Wert-Paare anhängen.inneres Wörterbuch Parsing eines JSON-Objekts in Python
filelist.append({"url": url, "exename": ename, "filename": fname}] as I loop through a set of files.
Later, loads() the below json object to a "json" key:
for file in filelist: file["json"] = json.loads(json)
Ich habe keine Schwierigkeiten beim Herausziehen der ersten Schicht von Wörterbuchwerten, dh.
for files in filelist:
print files["json"]["response_code"]
>>> 1
Allerdings habe ich Probleme habe, um das innere Wörterbuch auf immer gebunden zu Dateien [ "json"] [ "Scans"] zum Beispiel gehe ich davon aus:
for files in filelist:
for avvendors in files["json"]["scans"]
I bin wirklich daran interessiert, den "entdeckten" Schlüssel herauszuziehen, aber es scheint, dass Python den Schlüssel "scans" nicht als Wörterbuch lädt, sondern stattdessen als String speichert. Ich denke daran, eine zweite Ladung() auf dem inneren Wörterbuch zu tun, um zu sehen, was passiert.
for stuff in avvendors:
if stuf["detected"]:
#do something
Ich bin nicht wirklich sicher, was hier passiert. Ich weiß, dass ich es wahrscheinlich herausfinden werde, aber einige Einblicke darin, was Python mit dem Json intern tun würde, wären nett. Außerdem werde ich bis Montag oder Dienstag, vielleicht sogar Mittwoch, keine Gelegenheit haben, daran zu arbeiten, und die Spannung bringt mich um.
Hier ist der vollständige Block zur besseren Lesbarkeit:
für Dateien in Dateiliste: für avvendors in Dateien [ "json"] [ "Scans]: wenn avvendors [" erkannt "]: #Do etwas Nützliches
{"response_code": 1,
"verbose_msg": "Scan finished, scan information embedded in this object",
"resource": "99017f6eebbac24f351415dd410d522d",
"scan_id": "52d3df0ed60c46f336c131bf2ca454f73bafdc4b04dfa2aea80746f5ba9e6d1c-1273894724",
"md5": "99017f6eebbac24f351415dd410d522d",
"sha1": "4d1740485713a2ab3a4f5822a01f645fe8387f92",
"sha256": "52d3df0ed60c46f336c131bf2ca454f73bafdc4b04dfa2aea80746f5ba9e6d1c",
"scan_date": "2010-05-15 03:38:44",
"positives": 40,
"total": 40,
"scans": {"nProtect": {"detected": true, "version": "2010-05-14.01", "result": "Trojan.Generic.3611249", "update": "20100514"},
"CAT-QuickHeal": {"detected": true, "version": "10.00", "result": "Trojan.VB.acgy", "update": "20100514"},
"McAfee": {"detected": true, "version": "5.400.0.1158", "result": "Generic.dx!rkx", "update": "20100515"},
"TheHacker": {"detected": true, "version": "6.5.2.0.280", "result": "Trojan/VB.gen", "update": "20100514"},
"VirusBuster": {"detected": true, "version": "5.0.27.0", "result": "Trojan.VB.JFDE", "update": "20100514"},
"NOD32": {"detected": true, "version": "5115", "result": "a variant of Win32/Qhost.NTY", "update": "20100514"},
"F-Prot": {"detected": false, "version": "4.5.1.85", "result": null, "update": "20100514"},
"Symantec": {"detected": true, "version": "20101.1.0.89", "result": "Trojan.KillAV", "update": "20100515"},
"Norman": {"detected": true, "version": "6.04.12", "result": "W32/Smalltroj.YFHZ", "update": "20100514"},
"TrendMicro-HouseCall": {"detected": true, "version": "9.120.0.1004", "result": "TROJ_VB.JVJ", "update": "20100515"},
"Avast": {"detected": true, "version": "4.8.1351.0", "result": "Win32:Malware-gen", "update": "20100514"},
"eSafe": {"detected": true, "version": "7.0.17.0", "result": "Win32.TRVB.Acgy", "update": "20100513"},
"ClamAV": {"detected": false, "version": "0.96.0.3-git", "result": null, "update": "20100514"},
"Kaspersky": {"detected": true, "version": "7.0.0.125", "result": "Trojan.Win32.VB.acgy", "update": "20100515"},
"BitDefender": {"detected": true, "version": "7.2", "result": "Trojan.Generic.3611249", "update": "20100515"},
"Comodo": {"detected": true, "version": "4842", "result": "Heur.Suspicious", "update": "20100515"},
"F-Secure": {"detected": true, "version": "9.0.15370.0", "result": "Trojan.Generic.3611249", "update": "20100514"},
"DrWeb": {"detected": true, "version": "5.0.2.03300", "result": "Trojan.Hosts.37", "update": "20100515"},
"AntiVir": {"detected": true, "version": "8.2.1.242", "result": "TR/VB.acgy.1", "update": "20100514"},
"TrendMicro": {"detected": true, "version": "9.120.0.1004", "result": "TROJ_VB.JVJ", "update": "20100514"},
"McAfee-GW-Edition": {"detected": true, "version": "2010.1", "result": "Generic.dx!rkx", "update": "20100515"},
"Sophos": {"detected": true, "version": "4.53.0", "result": "Troj/VBHost-A", "update": "20100515"},
"eTrust-Vet": {"detected": true, "version": "35.2.7490", "result": "Win32/ASuspect.HDBBD", "update": "20100515"},
"Authentium": {"detected": false, "version": "5.2.0.5", "result": null, "update": "20100514"},
"Jiangmin": {"detected": true, "version": "13.0.900", "result": "Trojan/VB.yqh", "update": "20100514"}, [...] }
Denken Sie daran, als in Python 3.x ist dies nur '' dict.items() ''. –
Also Python lädt wahrscheinlich das innere Wörterbuch als ein Wörterbuch, und ich bin falsch in der Annahme, dass es nur als String geladen wurde? – Dale
'json.loads()' gibt ein Python-Objekt zurück, z. B. eine Liste mit Dicts von Dicts. Also ja, das innere Wörterbuch ist ein Diktat, keine Zeichenfolge. – unutbu