如何修改jq过滤表达式,避免无版本字段时报错并返回空值
解决jq处理JSON生成CSV时字段缺失的报错问题
你当前的jq表达式在software.version字段存在时能正常生成CSV,但该字段缺失时会触发报错——原因是直接对可能不存在的字段使用数组迭代[],当字段为null或不存在时,null[]会抛出错误导致脚本终止。
修改后的完整jq表达式
.result[] | [ "https://vuldb.com/?id." + .entry.id, .software.vendor // "empty", .software.name // "empty", try (.software.version[] | tostring) // "empty", .software.type // "empty", .software.platform // "empty" ]
关键修改点说明
把原表达式中(.software.version []| tostring // "empty")替换为try (.software.version[] | tostring) // "empty":
try关键字会捕获迭代过程中的所有错误(比如字段不存在、目标不是数组等情况),出错时返回null- 再通过
// "empty"将null替换为你指定的空值标记,确保CSV输出结构完整
可选:合并多版本为单个字符串
如果你的需求是将多个版本用逗号拼接成单个字符串(每个条目仅输出一行CSV),可以使用这个版本:
.result[] | [ "https://vuldb.com/?id." + .entry.id, .software.vendor // "empty", .software.name // "empty", (.software.version // [] | map(tostring) | join(",") // "empty"), .software.type // "empty", .software.platform // "empty" ]
这个版本会:
- 若
software.version不存在,默认使用空数组[] - 将数组中的每个版本转为字符串后用逗号拼接
- 拼接结果为空时(比如空数组),替换为"empty"
内容的提问来源于stack exchange,提问作者def0to
相关产品推荐
相关产品推荐

