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

使用Pandas Normalize转嵌套JSON为CSV时,提取cve.description.description_data数据

解决cve.description.description_data列的JSON格式提取问题

我明白你的困扰——用json_normalize处理NVD的CVE数据时,像cve.description.description_data这种嵌套数组型的JSON字段经常会被保留成原始格式,没法直接用。下面给你两种针对性的解决方法,适配不同的场景:

方法一:针对description_data仅含单个元素的常规情况(NVD数据大多如此)

NVD的CVE数据里,description_data通常是只包含一个描述项的数组,我们可以先提取数组里的字典,再展开成单独的列:

import json
import pandas as pd

# 加载JSON文件
with open('nvdcve-1.0-modified.json') as f:
    d = json.load(f)

# 展开第一层嵌套数据
nycphil = pd.json_normalize(d['CVE_Items'])

# 提取description_data数组中的第一个元素(常规情况只有一个)
desc_data = nycphil['cve.description.description_data'].apply(lambda x: x[0] if len(x) > 0 else {})

# 将提取到的字典展开为独立列
desc_df = pd.json_normalize(desc_data)

# 重命名列,让含义更清晰
desc_df.columns = ['cve_description_language', 'cve_description_content']

# 合并回原DataFrame,同时删除原JSON格式列
nycphil = pd.concat([nycphil.drop('cve.description.description_data', axis=1), desc_df], axis=1)

# 查看处理后的前3行数据
nycphil.head(3)

方法二:针对description_data含多个元素的特殊情况

如果你的数据里存在多个描述项的情况,可以先把数组拆分成多行,再展开字段:

# 承接上面加载好的nycphil数据
# 将description_data数组拆分成多行
nycphil_exploded = nycphil.explode('cve.description.description_data')

# 展开每行的描述字典
desc_df_exploded = pd.json_normalize(nycphil_exploded['cve.description.description_data'])

# 合并数据并清理原列
nycphil_final = pd.concat([nycphil_exploded.drop('cve.description.description_data', axis=1), desc_df_exploded], axis=1)

这样处理后,你就能得到完全展开的结构化数据,导出CSV的时候就不会有嵌套JSON的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:42:18