2012-04-14 10 views
1

私はfilelist = [] というリストを持っています。これにはいくつかのキー値のペアの辞書が追加されています。Pythonのjsonオブジェクトの内部辞書解析

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) 

私はトラブル辞書値、すなわちの第一層を引き出しを持っていないのです。

for files in filelist: 
    for avvendors in files["json"]["scans"] 

I:

for files in filelist: 
    print files["json"]["response_code"] 

>>> 1 

しかし、私は私が ファイル[ "JSON"] [ "スキャン"]例えば にバインドされていると仮定している内部辞書に得ることで問題を抱えています私は本当に "検出"キーを引き出すことに興味がありますが、Pythonは辞書として "スキャン"キーを読み込んでいないのですが、代わりに文字列として格納しているようです。私は何が起こるかを見るために内側の辞書の2番目の負荷()を行うことを考えています。

for stuff in avvendors: 
    if stuf["detected"]: 
     #do something 

ここで何が起こっているのか分かりません。私はおそらくそれを理解するだろう知っているが、内部的にjsonで何が行われているのかについてのいくつかの洞察は素晴らしいだろう。また、私は月曜日か火曜日までこれを処理する機会を得ることはありません。そしておそらく水曜日でさえ、サスペンスは私を殺しています。ファイルリスト内のファイルの

はここで完全な読みやすさのために、ブロックの avvendors用のファイルで、[ "JSON"] [ "スキャン]: 場合avvendors [" 検出」]:

便利 #Do何かdictの繰り返し処理を行う場合、
{"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"}, [...] } 

答えて

2

は注意してくださいそれはちょうどキーを返しますが、キーと値をしたい場合は、.iteritems()法(またはのpython3、.items()で)を使用します。。

あなたのケースでは

scansキーの値は辞書です:"scans": {"nProtect": ...}

+0

が、これは単に '' dict.items() ''であるのpython 3.xではよりも、覚えておいてください。 –

+0

Pythonはおそらく辞書として内部辞書をロードしていて、それは文字列としてロードされたと仮定して間違っていますか? – Dale

+0

'json.loads()'は、dictsのdictsのリストのようなPythonオブジェクトを返します。だから、内側の辞書は文字列ではなく辞書である。 – unutbu