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

如何修改Jolt转换规范实现循环迭代以生成目标JSON输出?

Jolt转换问题解决方案

问题描述

我有如下输入JSON:

{
  "a": [
    [
      "a1"
    ],
    [
      "a2"
    ]
  ],
  "b": [
    [
      "b1",
      "b2"
    ],
    [
      "b3",
      "b4"
    ]
  ]
}

期望通过Jolt转换得到如下输出JSON:

[
  {
    "a": "a1",
    "b": "b1"
  },
  {
    "a": "a1",
    "b": "b2"
  },
  {
    "a": "a2",
    "b": "b3"
  },
  {
    "a": "a2",
    "b": "b4"
  }
]

尝试结合shift和cardinality操作编写了如下转换规范,但无法正确实现循环迭代:

[
  {
    "operation": "shift",
    "spec": {
      "*": "&"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[&].&1"
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "*": "ONE"
      }
    }
  }
]

请问需要如何修改该Jolt转换规范以达成需求?


修改后的Jolt转换规范

直接调整shift操作的层级关联逻辑,即可生成目标输出,无需额外cardinality操作:

[
  {
    "operation": "shift",
    "spec": {
      "a": {
        "*": {
          "*": {
            "@(3,b[&1][*])": {
              "$(3,1)": "[#2].a",
              "@": "[#2].b"
            }
          }
        }
      }
    }
  }
]

逻辑说明

  • 先遍历a数组的每个子数组(索引&1对应0、1),再取子数组内的元素(a1、a2)
  • 通过@(3,b[&1][*])关联b数组中对应索引的子数组所有元素,比如a的第0个索引对应b的[b1,b2],第1个索引对应[b3,b4]
  • $(3,1)获取当前a的元素值,赋值给结果对象的a字段;@获取当前遍历的b元素值,赋值给b字段
  • [#2]自动生成连续的数组索引,让每个a与对应b子数组元素的组合都成为数组中的独立对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:50:24