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

使用JOLT提取并合并输入元素中数组内的异构对象问题求助

解决JOLT合并数组中属性不统一对象的问题

我明白你遇到的痛点了——当数组里的对象属性零散分布,要按某个键(比如id)把所有相关属性合并到一起,确实容易在JOLT里卡壳。我给你准备了一个贴合你场景的示例,还有对应的JOLT转换规则,一步步拆解给你看:

示例输入

[
  {
    "id": "1",
    "name": "Alice",
    "email": "alice@example.com"
  },
  {
    "id": "1",
    "age": 30,
    "phone": "123-456-7890"
  },
  {
    "id": "2",
    "name": "Bob",
    "phone": "987-654-3210"
  },
  {
    "id": "2",
    "email": "bob@example.com"
  }
]

期望输出

[
  {
    "id": "1",
    "name": "Alice",
    "email": "alice@example.com",
    "age": 30,
    "phone": "123-456-7890"
  },
  {
    "id": "2",
    "name": "Bob",
    "phone": "987-654-3210",
    "email": "bob@example.com"
  }
]

JOLT转换规范

[
  // 第一步:按id分组,把相同id的对象归到同一数组下
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": "@(1,id).id",
        "*": "@(1,id).&"
      }
    }
  },
  // 第二步:合并每个id下的对象数组,把所有属性整合到一个对象中
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "*": "=mergeObjects(@(1))"
      }
    }
  },
  // 第三步:把分组后的结构转换回数组格式
  {
    "operation": "shift",
    "spec": {
      "*": "[]"
    }
  }
]

规则解释

  1. Shift(分组阶段):

    • 遍历输入数组的每个对象(*),用@(1,id)获取当前对象的id值,作为分组的键
    • 把id字段和其他所有字段(*)都映射到对应id的分组下,这样相同id的所有属性会被收集到同一个对象数组里
  2. Modify-Overwrite-Beta(合并阶段):

    • 遍历每个id分组(*),用=mergeObjects(@(1))函数把该分组下的对象数组合并成一个单独的对象,自动保留所有存在的属性,不会丢失零散分布的键
  3. Shift(数组转换阶段):

    • 把分组后的键值对结构重新转换为数组,得到最终的合并结果

这个方案完全适配你描述的“部分对象属性不统一”的场景,不管某个键只存在于少数对象中,都能被正确合并到对应id的对象里。

内容的提问来源于stack exchange,提问作者System.Cats.Lol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:35:35