JSON - 解析独立命名的子对象

时间:2017-08-28 14:25:01

标签: python arrays json

我正在使用VirusTotal API尝试编写将扫描并报告结果的脚本。我遇到的问题是代码的SCANS部分,我可以提取有多少是正面的,但是想要输出每个正面扫描和结果(病毒名称,网络钓鱼等)。

示例JSON:

{
'response_code': 1,
'verbose_msg': 'Scan finished, scan information embedded in this object',
'scan_id':'1db0ad7dbcec0676710ea0eaacd35d5e471d3e11944d53bcbd31f0cbd11bce31-1390467782',
'permalink': 'https://www.virustotal.com/url/__urlsha256__/analysis/1390467782/',
'url': 'http://www.virustotal.com/',
'scan_date': '2014-01-23 09:03:02',
'filescan_id': null,
'positives': 0,
'total': 51,
'scans': {
      'CLEAN MX': {
      'detected': false,
      'result': 'clean site'
       },
      'MalwarePatrol': {
      'detected': false,
      'result': 'clean site'
      }
 }
 }

我写的代码似乎没有将所有扫描信息传递到循环中我唯一可以访问的是未检测到的AV扫描器名称/每个的结果信息。第一次使用JSON api,所以感谢任何帮助。

params = {'apikey': apikey, 'resource':line}
response = requests.get(vt_report_url, params=params)
result = response.json()

if result['positives'] != "0":
    print "malware detection"
    for avList in result['scans']:
        if avList[1] == 'true':
            print str(avList[0]) + " - "+ str(avList[2])

1 个答案:

答案 0 :(得分:0)

从代码中我可以看到scans是一个字典,所以你需要使用dict.items()循环它。

<强>代码:

params = {'apikey': apikey, 'resource':line}
response = requests.get(vt_report_url, params=params)
result = response.json()

if result['positives'] != 0:
    print "malware detection" 
    for key, value in result['scans'].items():
        if value['detected'] == False:
            print str(key) + " - "+ str(value['result'])

<强>输出:

malware detection
CLEAN MX {'detected': False, 'result': 'clean site'}