如何用PowerShell从已有JSON文件生成指定字段的新JSON文件
提取JSON指定字段生成新JSON文件的解决方案
需求说明
从给定的npm audit JSON报告中提取指定字段(name、severity、range、cwe、cvss、fixAvailable),同时保留原有的auditReportVersion字段,生成仅包含目标字段的新JSON文件。
实现步骤(Node.js脚本)
使用Node.js编写脚本处理JSON文件是最直接的方式,以下是具体实现:
准备文件
- 将原始JSON数据保存为
original-audit.json - 创建脚本文件
extract-fields.js
- 将原始JSON数据保存为
脚本代码
const fs = require('fs'); // 读取原始JSON文件 const rawContent = fs.readFileSync('./original-audit.json', 'utf8'); const auditResult = JSON.parse(rawContent); // 定义需要保留的目标字段 const targetFields = ['name', 'severity', 'range', 'cwe', 'cvss', 'fixAvailable']; // 处理漏洞条目,提取目标字段 const filteredVulnerabilities = {}; for (const [pkgKey, pkgInfo] of Object.entries(auditResult.vulnerabilities)) { const filteredInfo = {}; // 提取顶层存在的目标字段 targetFields.forEach(field => { if (pkgInfo[field] !== undefined) { filteredInfo[field] = pkgInfo[field]; } }); // 从via数组中补充cwe和cvss(如果顶层没有的话) if (!filteredInfo.cwe && pkgInfo.via?.length) { filteredInfo.cwe = pkgInfo.via[0].cwe; } if (!filteredInfo.cvss && pkgInfo.via?.length) { filteredInfo.cvss = pkgInfo.via[0].cvss; } filteredVulnerabilities[pkgKey] = filteredInfo; } // 构建最终的JSON结构 const finalResult = { auditReportVersion: auditResult.auditReportVersion, vulnerabilities: filteredVulnerabilities }; // 写入新文件(格式化输出便于阅读) fs.writeFileSync('./filtered-audit.json', JSON.stringify(finalResult, null, 2)); console.log('处理完成,已生成filtered-audit.json');
- 运行脚本
在终端执行命令:
node extract-fields.js
脚本说明
- 自动保留
auditReportVersion字段,与原始报告版本一致 - 优先提取漏洞条目中顶层的目标字段,若顶层不存在
cwe/cvss,则从via数组的第一个条目里补充 - 生成的JSON文件会自动格式化,可读性更强
- 若某个漏洞条目缺少指定字段,该字段会被自动忽略,不会出现在结果中
内容的提问来源于stack exchange,提问作者simon farande
相关产品推荐
相关产品推荐

