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

如何使用jq将含数组的JSON转置输出为CSV格式?

解决用jq将JSON数组转置为CSV的问题

没问题,我来帮你搞定这个转置JSON到CSV的需求!你之前的命令jq --raw-output 'keys , .[] | @csv'会把每个单独的数组输出成一行,这显然不是你要的转置后格式——我们需要的是把每个索引位置上的所有字段元素组合成一行,而且要适配任意长度的数组(最多600个元素也没问题)。

最终可用的jq命令

直接用这个命令处理你的input.json就能得到想要的结果:

jq --raw-output '
  keys as $headers
  | .[0] | length as $rowCount
  | $headers,
    (range($rowCount) as $i | [ $headers[] | .[$i] ])
  | @csv
' input.json

命令分步解释

我来拆解一下这个命令的逻辑,方便你理解:

  1. 获取表头:keys as $headers 把JSON对象的所有键(也就是CSV的表头字段名,比如latitude、longitude)存储到变量$headers中。
  2. 确定数据行数:.[0] | length as $rowCount 取第一个数组的长度作为总数据行数(你已经确认所有数组元素数量一致,所以这个操作是安全的)。
  3. 输出表头行:先把$headers数组转成CSV格式,作为结果的第一行。
  4. 遍历生成每一行数据:用range($rowCount) as $i遍历每个索引(从0到$rowCount-1),对于每个索引$i,遍历所有表头字段,取出该字段对应数组中第$i个元素,组成一个新数组——这个数组就是CSV的一行数据。
  5. 转成CSV格式:最后把表头数组和每个数据数组都通过@csv转换成标准的CSV格式,--raw-output确保输出是纯文本而非JSON字符串。

测试你的示例输入

用你提供的input.json运行这个命令,会得到如下输出:

"latitude","longitude","drivingDifficultyIndex","iconCode","observationTimeUtcIso","precip1Hour"
39.582,26.675,0,31,"2016-06-26T00:20:00+0000",0.0
39.582,26.675,34,11,"2016-06-26T01:20:00+0000",0.1
39.582,26.675,34,11,"2016-06-26T02:20:00+0000",0.5

完全符合你期望的转置后格式,而且不管数组长度是3还是600,这个命令都能自动适配,不用手动修改行数参数~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:00:18