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

如何使用JSON Jolt转换记录:展开列表并保留索引对应关系

Jolt转换:按索引映射列表元素生成对应记录

需要将指定JSON转换为多条记录,展开列表时保持各列表元素的索引一一对应,同时保留非列表属性。

原始输入JSON

{
  "id": "test",
  "name": "John",
  "number": [
    1,
    2,
    3
  ],
  "letter": [
    "a",
    "b",
    "c"
  ]
}

尝试的Jolt规则(无效)

[
  {
    "operation": "shift",
    "spec": {
      "@": "[]"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "number": {
          "*": {
            "@2,id": "&3.&1.id",
            "@2,name": "&3.&1.name",
            "@2,letter": "&3.&1.letter",
            "@": "&3.&1.&2"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": ""
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "letter": {
          "*": {
            "@2,id": "&3.&1.id",
            "@2,name": "&3.&1.name",
            "@2,number": "&3.&1.number",
            "@": "&3.&1.&2"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": ""
      }
    }
  }
]

当前错误输出

[
  {
    "id": "test",
    "name": "John",
    "number": 1,
    "letter": "a"
  },
  {
    "id": "test",
    "name": "John",
    "number": 1,
    "letter": "b"
  },
  {
    "id": "test",
    "name": "John",
    "number": 1,
    "letter": "c"
  },
  {
    "id": "test",
    "name": "John",
    "number": 2,
    "letter": "a"
  },
  {
    "id": "test",
    "name": "John",
    "number": 2,
    "letter": "b"
  },
  {
    "id": "test",
    "name": "John",
    "number": 2,
    "letter": "c"
  },
  {
    "id": "test",
    "name": "John",
    "number": 3,
    "letter": "a"
  },
  {
    "id": "test",
    "name": "John",
    "number": 3,
    "letter": "b"
  },
  {
    "id": "test",
    "name": "John",
    "number": 3,
    "letter": "c"
  }
]

期望输出

[
  {
    "id": "test",
    "name": "John",
    "number": 1,
    "letter": "a"
  },
  {
    "id": "test",
    "name": "John",
    "number": 2,
    "letter": "b"
  },
  {
    "id": "test",
    "name": "John",
    "number": 3,
    "letter": "c"
  }
]

正确的Jolt转换规则

[
  {
    "operation": "shift",
    "spec": {
      "id": "[&1].id",
      "name": "[&1].name",
      "number": {
        "*": {
          "@": "[&1].number",
          "@2,letter[&1]": "[&1].letter"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "[]"
    }
  }
]

规则解释

  1. 第一个shift操作:
    • 将id和name绑定到每个索引位置的对象中,[&1]对应后续列表的索引,确保非列表属性能和每条记录关联
    • 遍历number列表的每个元素,*代表当前元素的索引;将当前number值放入对应索引的number字段,同时通过@2,letter[&1]获取同索引的letter值,放入对应位置的letter字段
  2. 第二个shift操作:
    • 将按索引分组的对象转换为数组形式,得到最终的一对一映射记录列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:26:04