如何使用jq将指定JSON转换为以Columns.Id为表头的CSV?
使用jq将指定JSON转换为CSV的解决方案
核心需求回顾
- 表头取自JSON中
Columns数组内各元素的Id字段 - 数据仅提取
Rows数组里的Values对应内容 - 忽略JSON内其他无关字段
示例JSON输入
{ "Columns": [ {"Id": "Name"}, {"Id": "Age"}, {"Id": "City"} ], "Rows": [ {"Values": ["Alice", 30, "New York"]}, {"Values": ["Bob", 25, "London"]} ], "OtherMetadata": "无需处理的字段" }
期望CSV输出
Name,Age,City Alice,30,New York Bob,25,London
可行的jq命令
直接运行以下命令即可完成转换(将input.json替换为你的实际JSON文件路径):
jq -r ' .Columns | map(.Id) as $headers | .Rows | map(.Values) as $rows | [$headers] + $rows | map(@csv) | join("\n") ' input.json
命令拆解说明
-r:让jq输出原始字符串(避免自动添加多余引号).Columns | map(.Id):遍历Columns数组,提取每个元素的Id字段,生成表头数组as $headers:将表头数组存入变量,方便后续复用.Rows | map(.Values):遍历Rows数组,提取每行的Values数据,生成二维行数据数组[$headers] + $rows:把表头作为第一行,和所有行数据合并成完整的二维数组map(@csv):对每一行数组应用@csv过滤器,自动处理逗号、引号等特殊字符的转义join("\n"):将所有CSV行用换行符连接,生成最终的CSV文本
特殊情况处理
如果你的JSON中存在带逗号、双引号的字段(比如Values里有"Smith, Jane"),@csv会自动转义为符合CSV规范的格式,无需额外处理。
内容的提问来源于stack exchange,提问作者Raghav Krishna
相关产品推荐
相关产品推荐

