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

Pandas处理72MB JSON提取Agent_UUID、CVE及名称遇问题求助

处理JSON文件提取资产对应CVE信息的正确方案

步骤1:读取JSON文件

先通过json模块读取文件,比直接用pd.read_json更灵活,能避免嵌套结构解析问题:

import json
import pandas as pd

# 替换成你的JSON文件路径
with open('your_asset_data.json', 'r', encoding='utf-8') as f:
    raw_data = json.load(f)

步骤2:解析嵌套结构并整理数据

假设你的JSON结构是类似「顶级包含资产列表,每个资产下嵌套CVE列表」的格式(如果结构不同,替换对应的键名即可),遍历提取所需字段:

processed_rows = []

# 遍历每个资产,替换"assets"为你JSON中资产列表的实际顶级键
for asset in raw_data.get('assets', []):
    agent_uuid = asset.get('Agent_UUID')
    # 替换"vulnerabilities"为资产下CVE列表的实际键名
    cve_list = asset.get('vulnerabilities', [])
    
    for cve in cve_list:
        processed_rows.append({
            'Agent_UUID': agent_uuid,
            'CVE编号': cve.get('cve_id'),  # 替换成JSON中CVE编号的实际键名
            'CVE名称': cve.get('cve_name')  # 替换成JSON中CVE名称的实际键名
        })

# 转为DataFrame
result_df = pd.DataFrame(processed_rows)

步骤3:按Agent_UUID汇总CVE信息

如果需要将同一Agent的所有CVE信息汇总到一起,用groupby实现:

# 按Agent分组,把CVE编号和名称合并为列表
summary_df = result_df.groupby('Agent_UUID').agg({
    'CVE编号': list,
    'CVE名称': list
}).reset_index()

# 可选:转为更易读的字符串格式
summary_df['CVE详情'] = summary_df.apply(
    lambda x: '\n'.join([f"{id}: {name}" for id, name in zip(x['CVE编号'], x['CVE名称'])]),
    axis=1
)

# 查看结果
print(summary_df)

你遇到的错误解析

  • TypeError:大多是pd.json_normalize的输入格式不对(比如传了字典而非可迭代的列表),或是record_path参数指定的嵌套路径有误。
  • KeyError:是代码中指定的键在JSON结构中不存在,用dict.get()替代直接索引dict[key],能避免键不存在时报错,还能返回默认值(比如None)。

关键注意事项

  • 务必把代码中的所有键名(如assets、vulnerabilities、cve_id)替换为你JSON里的实际键名。不确定结构的话,先打印部分数据查看:print(json.dumps(raw_data['assets'][:2], indent=2))。
  • 72MB的文件用这种遍历方式完全没问题,不会有内存压力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:58:17