2012-04-14 4 views
1

나는 filelist = [] 이라는 목록을 가지고 있는데 여기에 몇 가지 키 값 쌍의 사전을 추가하고 있습니다.파이썬에서 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"] [ "스캔"] 예를 들어 에 바인딩 있으리라 믿고있어 내부 사전에 점점에 문제가 있어요 '탐지 된 "키를 꺼내는 것에 정말로 관심이 있지만 파이썬이"스캔 "키를 사전으로로드하지 않고 대신 문자열로 저장하는 것으로 보입니다. 내부 사전에 두 번째 loads()를 수행하여 어떤 일이 발생하는지 생각하고 있습니다.

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

여기에 무슨 일이 일어나고 있는지 잘 모르겠습니다. 내가 알아낼 가능성이 있지만 파이썬이 내부적으로 json으로하는 일에 대한 통찰력은 좋을 것이다. 또한, 나는 월요일이나 화요일까지, 아마도 수요일까지이 일을 할 수있는 기회를 얻지 못할 것이고, 서스펜스가 나를 죽일 것이다. 파일 목록에있는 파일에 대한

:

여기 전체 읽기 쉽도록 블록의 avvendors에 대한 파일 [ "JSON"] [ "스캔] : 경우 avvendors ["발견 "] :

유용 #Do 뭔가 사전인가 반복 할 때
{"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

이는 파이썬 3.x를보다 기억 단지''dict.items()''. –

+0

그래서 파이썬 아마도 사전으로 내부 사전을로드하고 나는 그것이 문자열로로드되었습니다 가정에 틀렸어? – Dale

+0

'json.loads()'는 dicts의 dicts 목록과 같은 Python 객체를 반환합니다. 그래서 예, 내부 사전은 사전이 아니라 문자열입니다. – unutbu