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

使用jq将JSON转换为CSV时表头重复的问题咨询

为什么jq生成CSV时表头会重复出现?

这事儿很好理解——你写的jq命令把表头输出和每个issue的遍历绑定在一起了!

看你原命令:

jq -r '.issues[] | ["key","component", "textRange"], [.key,.component, .textRange[]] | @csv' test.issues.json

这里的.issues[]会逐个遍历JSON里的每一个issue对象,每遍历一个对象,就会先输出一次表头数组,再输出对应的数据行数组。相当于每处理一条数据,就重复打一次表头,结果自然就是每条数据前面都带着表头了。

另外还有个小问题:你表头里写的是"textRange",但数据里是把textRange的四个子字段(startLine、endLine等)展开输出的,这会导致表头列数(3列)和数据列数(6列)不匹配,CSV结构其实是有问题的。

正确的解决办法

我们要把表头的输出和数据遍历分开,让表头只输出一次,再遍历所有数据行:

方法1:明确指定textRange的子字段

jq -r '["key","component", "startLine", "endLine", "startOffset", "endOffset"], (.issues[] | [.key, .component, .textRange.startLine, .textRange.endLine, .textRange.startOffset, .textRange.endOffset]) | @csv' test.issues.json

方法2:合并数组简化写法

如果想保留用.textRange[]展开子字段的方式,可以把数据部分的数组合并:

jq -r '["key","component", "startLine", "endLine", "startOffset", "endOffset"], (.issues[] | [.key, .component] + [.textRange[]]) | @csv' test.issues.json

这两种写法的核心都是:先单独输出一次表头数组,再遍历所有issue生成对应的数据行,这样表头只会出现一次,同时表头列数和数据列数也完全对应了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:37:31