You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法解析json.dumps生成的字符串,提取指定分析结果键的技术求助

解决方法

问题核心是你误用了json.dumps():这个函数是把Python的列表/字典转成JSON格式的字符串,而非保留原生可操作的数据结构。所以变量y本质是字符串,不是列表/字典,自然没法用列表索引或字典键来提取数据。

方案1:直接使用原生Python数据结构(推荐)

去掉json.dumps()这一步,直接操作存储API结果的列表:

import requests

# 示例:提取唯一IP
unique_ips = ["1.2.3.4", "5.6.7.8"]
vt_results = []
API_KEY = "你的VirusTotal API密钥"

# 调用API并收集结果
for ip in unique_ips:
    url = f"https://www.virustotal.com/api/v3/ip_addresses/{ip}"
    headers = {"x-apikey": API_KEY}
    response = requests.get(url, headers=headers)
    # 直接将API返回的JSON转成Python字典,存入列表
    vt_results.append(response.json())

# 遍历列表提取引擎信息
for ip_result in vt_results:
    # 定位到分析结果层级
    analysis = ip_result["data"]["attributes"]["last_analysis_results"]
    # 遍历每个引擎的检测结果
    for engine_name, engine_info in analysis.items():
        category = engine_info["category"]
        result = engine_info["result"]
        print(f"引擎: {engine_name} | 分类: {category} | 结果: {result}")

方案2:如果已经生成了JSON字符串,先解析回Python对象

如果因为存储/传输需求已经把列表转成了字符串y,需要用json.loads()把它转回原生列表/字典:

import json

# 假设y是已通过json.dumps(vt_results)生成的字符串
vt_results = json.loads(y)

# 正常提取首个结果的引擎信息
first_ip_result = vt_results[0]
analysis_results = first_ip_result["data"]["attributes"]["last_analysis_results"]

# 提取指定引擎(如Bkav)的结果示例
bkav_info = analysis_results["Bkav"]
print(f"Bkav 分类: {bkav_info['category']}, 检测结果: {bkav_info['result']}")

注意事项

  • 严格匹配API返回结构:VirusTotal的IP分析结果层级是data -> attributes -> last_analysis_results,要确保键名拼写正确,避免触发KeyError。
  • 加入异常处理:实际代码中要捕获网络请求失败、API返回错误码等异常,避免程序直接崩溃。

内容的提问来源于stack exchange,提问作者catchabyte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:50:54