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

使用JQ按索引重组数组 将列结构JSON转换为可输出CSV的格式

列存储JSON转CSV的jq实现方案

核心思路

输入为列优先存储的JSON结构,所有列数组长度一致,我们只需要按索引对齐各列元素生成行优先的数据集,再通过jq内置的@csv指令输出标准CSV即可,无需生成你提到的非法中间JSON结构。

可用jq表达式

1. 带表头输出(推荐)

jq -r 'keys_unsorted as $headers | $headers, (.[$headers[0]] | keys | map(. as $i | $headers | map(.[$i])))[] | @csv'

逻辑说明:

  • keys_unsorted as $headers:提取输入JSON的所有列名作为表头数组,keys_unsorted保证保留原始输入的列顺序,如果你需要按字母排序表头可替换为keys
  • $headers:输出表头行
  • (.[$headers[0]] | keys | map(. as $i | $headers | map(.[$i]))):遍历第一列的所有索引,按索引提取每一列对应位置的元素,拼接为数据行
  • [] | @csv:将所有行(表头+数据)转换为标准CSV格式,-r参数保证输出无多余转义的原始CSV字符串

2. 不带表头输出

去掉表达式中输出表头的部分即可:

jq -r 'keys_unsorted as $headers | (.[$headers[0]] | keys | map(. as $i | $headers | map(.[$i])))[] | @csv'

输出效果

使用你提供的输入示例(修复非法数值后)执行上述命令,即可直接得到你期望的CSV结果:

AAA,BBB,CCC,DDD,EEE
111.1,222.1,333.1,444.1,555.1
111.2,222.2,333.2,444.2,555.2
111.3,222.3,333.3,444.3,555.3
111.4,222.4,333.4,444.4,555.4
111.5,222.5,333.5,444.5,555.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:36:04