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

如何用jq更简洁地将嵌套JSON展开为类CSV格式?

简化JSON展开为类CSV格式的jq实现

示例输入数据

[
    {
        "user": {
            "foo": "a1",
            "bar": "b1"
        },
        "data": [
            {
                "baz": "c1.1",
                "beq": "d1.1"
            },
            {
                "baz": "c1.2",
                "beq": "d1.2"
            }
        ]
    },
    {
        "user": {
            "foo": "a2",
            "bar": "b2"
        },
        "data": [
            {
                "baz": "c2.1",
                "beq": "d2.1"
            },
            {
                "baz": "c2.2",
                "beq": "d2.2"
            },
            {
                "baz": "c2.3",
                "beq": "d2.3"
            }
        ]
    }
]

期望输出(类TSV格式)

a1  b1  d1.1
a1  b1  d1.2
a2  b2  d2.1
a2  b2  d2.2
a2  b2  d2.3

现有实现代码

.[] | .user as $user | foreach .data[] as $d ([]; . ; . + [$user.foo, $user.bar, $d.beq]) | @tsv

简化实现

可以直接通过嵌套遍历+数组构造完成,无需使用foreach:

.[] | .user as $u | .data[] | [$u.foo, $u.bar, .beq] | @tsv

逻辑说明

  1. .[] 遍历顶层的每个用户对象
  2. .user as $u 暂存当前用户的foo和bar信息
  3. .data[] 遍历当前用户下的每条数据记录
  4. [$u.foo, $u.bar, .beq] 按需求组合成目标字段数组
  5. @tsv 将数组转换为制表符分隔的文本格式

这个写法逻辑更直白,通过嵌套遍历实现用户信息与数据记录的笛卡尔积组合,代码量更精简。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:11:06