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

如何在Linux命令行用jq将嵌套JSON转换为CSV?求解决方案

用jq将嵌套JSON转换为CSV/Markdown表格的解决方案

针对你提供的嵌套JSON结构,这里给出具体的jq命令,实现将文件名作为第一列,展开嵌套的Setting字段,并统一处理不同字段名(如部分对象用Check而非Rule),最终生成符合要求的CSV或Markdown表格。

生成CSV格式

执行以下命令,将输入JSON文件(假设名为input.json)转换为标准CSV:

jq -r '
to_entries[]
| .key as $filename
| .value[]
| .Setting + {Filename: $filename} + del(.Setting)
| {Filename, SettingA, SettingB, Rule: (.Rule // .Check), Description, Line, Link, Message, Severity, Span: (.Span | join(",")), Match}
| [.Filename, .SettingA, .SettingB, .Rule, .Description, .Line, .Link, .Message, .Severity, .Span, .Match]
| @csv
' input.json

命令解析

  • to_entries[]:将顶层的文件名-错误数组键值对转换为可遍历的条目结构
  • .key as $filename:保存当前文件名到变量,后续作为表格第一列
  • .value[]:遍历每个文件名对应的所有错误对象
  • .Setting + {Filename: $filename} + del(.Setting):展开Setting中的字段,合并文件名到当前对象,删除原Setting字段
  • Rule: (.Rule // .Check):兼容部分对象使用Check字段的情况,统一映射到Rule列
  • [.Filename, ...]:按指定顺序整理需要导出的字段为数组
  • @csv:将数组转换为标准CSV格式,自动处理特殊字符和引号

转换后的CSV示例:

"dir/file1.txt","",null,"Rulechecker.Rule15","",11,"www.sample.com","Some message","error","1,3","[id"
"dir/file1.txt","",null,"Rulechecker.Rule16","",27,"www.sample.com","Fix the rule","error","1,3","[id"
"dir/file2.txt","",null,"Rulechecker.Rule17","",51,"www.example.com","Fix another 'rule'?","error","1,18","[source,terminal]
----
"

生成Markdown表格格式

如果需要直接生成你展示的Markdown表格,可执行以下命令:

jq -r '
["Filename", "SettingA", "SettingB", "Rule", "Description", "Line", "Link", "Message", "Severity", "Span", "Match"] as $headers
| $headers | @csv,
| $headers | map("---") | @csv,
| to_entries[]
| .key as $filename
| .value[]
| .Setting + {Filename: $filename} + del(.Setting)
| {Filename, SettingA, SettingB, Rule: (.Rule // .Check), Description, Line, Link, Message, Severity, Span: (.Span | join(",")), Match}
| [.Filename, .SettingA, .SettingB, .Rule, .Description, .Line, .Link, .Message, .Severity, .Span, .Match]
| @csv
' input.json | sed '
1s/^/| /; 1s/$/ |/; 1s/,/ | /g;
2s/^/| /; 2s/$/ |/; 2s/,/ | /g;
3,$s/^/| /; 3,$s/$/ |/; 3,$s/,/ | /g
'

命令解析

在CSV生成逻辑基础上,增加了:

  • 定义表头数组并输出表头行
  • 生成表头对应的分隔线行
  • 通过sed将CSV格式转换为Markdown表格的分隔符格式

最终生成的Markdown表格如下:

FilenameSettingASettingBRuleDescriptionLineLinkMessageSeveritySpanMatch
dir/file1.txtnullRulechecker.Rule1511www.sample.comSome messageerror1,3[id
dir/file1.txtnullRulechecker.Rule1627www.sample.comFix the ruleerror1,3[id
dir/file2.txtnullRulechecker.Rule1751www.example.comFix another 'rule'?error1,18[source,terminal]
----

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:31:03