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

新手求助:如何用jq将嵌套JSON转换为指定格式CSV?

用JQ将嵌套JSON转换为CSV的解决方案

作为JQ新手,需要把三层嵌套的JSON转换成指定格式的CSV。

示例嵌套JSON(修正为合法格式)

{
  "level1-label": {
    "level2-text1": {
      "level3-label1": "value1",
      "level3-label2": "value2",
      "level3-label3": "value3"
    },
    "level2-text2": {
      "level3-label1": "value4",
      "level3-label2": "value5",
      "level3-label3": "value6"
    }
  }
}

注意:合法JSON要求键和字符串值必须用双引号包裹,否则JQ无法正常解析。

期望CSV输出

level2, level3-label1, level3-label2, level3-label3
level2-text1, value1, value2, value3
level2-text2, value4, value5, value6

已尝试的查询

你已经写出了两个分别提取level2键和level3键值的JQ查询:

  • 提取level2键:
jq -r ".level1-label | to_entries | map([.key])" input.json
  • 提取level3键值:
jq -r ".level1-label | to_entries | map(.value)" input.json

合并查询的解决方案

核心思路是把level2的键和对应的level3值合并到同一个数组中,再用JQ的@csv过滤器生成标准CSV格式。

固定level3键的场景(适合你的示例)

直接指定要提取的level3键,写法简单直观:

jq -r '
# 定义CSV表头
["level2", "level3-label1", "level3-label2", "level3-label3"],
# 遍历每个level2条目,组合键与对应的level3值
.level1-label | to_entries[] | [.key, .value."level3-label1", .value."level3-label2", .value."level3-label3"]
# 转换为CSV格式
| @csv
' input.json

动态level3键的场景(通用写法)

如果level3的键数量或名称不固定,可以自动获取所有level3键来生成表头和对应值:

jq -r '
# 获取第一个level2条目的所有level3键,作为表头的一部分
(.level1-label | to_entries[0].value | keys) as $level3_keys
# 组合完整表头
| ["level2"] + $level3_keys,
# 遍历每个level2条目,按表头顺序提取键和对应值
.level1-label | to_entries[] | [.key] + [$level3_keys[] as $k | .value[$k]]
# 转换为CSV格式
| @csv
' input.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:48:28