使用Python查找错误检测的发生情况

使用Python查找错误检测的发生情况,python,json,api,Python,Json,Api,我试图计算扫描检测到文件为假的次数。我试着查看诸如的链接,但没有解决我的问题。此外,我还没有与API的工作,所以任何帮助将不胜感激 这就是我目前所拥有的 # Making the API call url = 'https://www.virustotal.com/vtapi/v2/file/report' params = {'apikey': api_key, 'resource': sha1_num} response = requests.get(url, params=params)

我试图计算扫描检测到文件为假的次数。我试着查看诸如的链接,但没有解决我的问题。此外,我还没有与API的工作,所以任何帮助将不胜感激

这就是我目前所拥有的

# Making the API call
url = 'https://www.virustotal.com/vtapi/v2/file/report'
params = {'apikey': api_key, 'resource': sha1_num}

response = requests.get(url, params=params)
allJson = response.json()
data = json.dumps(allJson)

count = 0

item_dict = json.loads(data)
print len(item_dict['scans']

for entry in data['scans']:
    if entry['detected'] == 'false':
        count += 1
print (count)
这就是在virustotal上sublime.exe的结果

{
  "scans": {
    "Bkav": {
      "detected": false,
      "version": "1.3.0.9466",
      "result": null,
      "update": "20180619"
    },
    "MicroWorld-eScan": {
      "detected": false,
      "version": "14.0.297.0",
      "result": null,
      "update": "20180619"
    },
    "CMC": {
      "detected": false,
      "version": "1.1.0.977",
      "result": null,
      "update": "20180619"
    },
    "CAT-QuickHeal": {
      "detected": false,
      "version": "14.00",
      "result": null,
      "update": "20180619"
    },
    "ALYac": {
      "detected": false,
      "version": "1.1.1.5",
      "result": null,
      "update": "20180619"
    },

我很确定这个循环:
对于数据['scans']中的条目:
不会做您想要的事情。您正在迭代的
data['scans']
是一个字典,当您在字典上迭代时,您会得到它的键(在您的数据中,这些键是不同测试的名称)。您的代码希望得到一个字典而不是一个键字符串,因此它不会正常工作


尝试在字典的值上迭代,使用
作为数据['scans']中的条目。values():
。您可能还想测试布尔值
False
,而不是字符串
'False'
,因为Python的
json
解析器将为您转换它(如果不输入['detected']:),您可以执行

那么,您当前的代码有什么问题吗?如果您遇到异常,请发布完整的回溯。如果您得到的计数不正确或什么,请告诉我们您的期望值以及您得到的结果。我的新代码段是:
用于数据['scans'].values():如果条目['detected']==false:count+=1 print(count)
错误是它说,
第33行,用于数据['scans']中的条目。values():TypeError:字符串索引必须是整数
Oh,
数据
是字符串。真奇怪。您似乎正在将您的数据解码成字典(使用<代码>响应。jSOR())/代码>,然后重新编码它(使用<代码> JSON。转储)并再次解析它(<代码> JSON.Load ),只继续使用您在中间使用的编码版本。将循环中的
数据
替换为
allJson
item_dict
(应具有相同的内容)。也许应该考虑摆脱过度的解析和修复!好的,我对
item\u dict=json.load(allJson)
进行了注释,并将for循环更改为,
for allJson['scans'].values()中的条目:if entry['detected']==false:count+=1打印(count)
。但是,在allJson['scans']的for条目中,我得到了与第33行相同的错误。values():TypeError:string索引必须是整数
是否有我没有看到的东西。我试着用它,但仍然没有成功。听起来你仍然不确定哪些变量是字符串,哪些是解析字典。我建议打印出他们的
repr
s,可能还有他们的
类型
s,并确保你正在索引和迭代字典。堆栈溢出并不是获得交互式调试帮助的好地方。