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

GitLab容器扫描JSON转CSV:JQ命令报错求助

GitLab容器扫描JSON转CSV的JQ命令修正方案

问题背景

在GitLab流水线中将容器扫描生成的JSON报告转为CSV时,JQ命令执行报错,无法提取包名、版本及标识符信息。

报错原因分析

  1. 路径语法错误:原命令用逗号分隔路径(如.location | .dependency, .package, .name),JQ中逗号是序列操作符,会把多个对象/值依次放入数组,导致字符串与对象类型冲突,无法拼接;标识符部分.identifiers | .0, .type写法错误,数组索引需用[0],路径层级用.连接。
  2. 数组索引语法错误:访问数组第一个元素时,.0是无效写法,正确应为[0]。

修正后的JQ命令

步骤1:写入CSV表头

echo "id,message,description,severity,package_name,package_version,identifier_type,identifier_name,identifier_value,identifier_url" > $CI_PROJECT_DIR/reports/${IMAGENAME}-trivy.csv

步骤2:执行JQ转换

jq -r '.vulnerabilities[] | [
    .id,
    .message,
    .description,
    .severity,
    .location.dependency.package.name,
    .location.dependency.version,
    (.identifiers[0].type // "N/A"),
    (.identifiers[0].name // "N/A"),
    (.identifiers[0].value // "N/A"),
    (.identifiers[0].url // "N/A")
] | @csv' $CI_PROJECT_DIR/reports/gl-container-scanning-report.json >> $CI_PROJECT_DIR/reports/${IMAGENAME}-trivy.csv

关键修正点说明

  • 路径层级修正:用.直接嵌套访问属性(如.location.dependency.package.name),替代错误的逗号分隔写法,确保只提取目标字符串值。
  • 数组访问修正:用.identifiers[0]访问标识符数组的第一个元素,避免语法错误。
  • 空值处理:添加// "N/A",当字段不存在时用N/A填充,防止转换中断。
  • CSV格式化:使用@csv过滤器自动处理含逗号的字段(自动用引号包裹),比手动join(", ")更规范,避免CSV格式错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:53:18