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

如何用Jolt Spec将父对象所有键合并到数组内子对象

问题:合并父对象字段与候选对象数组中的每个元素

需求

  • 输入是一个数组,每个元素包含大量字段,以及一个active_candidates_group数组(存储候选对象)
  • 需要将每个候选对象与父对象的所有字段合并,生成新的输出数组
  • 注意:父对象字段数量多,不能硬编码;父对象与候选对象无重复字段;字段顺序无关紧要

输入示例

[
  {
    "id": 123,
    "name": "foo",
    // { 数百个其他字段 }
    "active_candidates_group": [
      {
        "person_id": 123,
        "person_name": "john"
        // { 候选对象专属字段,无重复 }
      },
      {
        "person_id": 321,
        "person_name": "bob"
        // { 候选对象专属字段,无重复 }
      }
    ]
  }
]

期望输出

[
   {
      "id": 123,
      "name": "foo",
      // { 父对象的数百个其他字段 }
      "person_id": 123,
      "person_name": "john"
      // { 候选对象其他字段 }
   },
   {
      "id": 123,
      "name": "foo",
      // { 父对象的数百个其他字段 }
      "person_id": 321,
      "person_name": "bob"
      // { 候选对象其他字段 }
   }
]

你尝试的Jolt Spec

[
  {
    "operation": "shift",
    "spec": {
      "*": { // 遍历输入数组中的每个对象
        "active_candidates_group": { // 匹配active_candidates_group键
          "*": { // 遍历active_candidates_group内的每个对象
            "@2": "&2[&1]", // 将父对象所有键复制到输出数组对应索引位置
            "*": "&2[&1].&" // 将当前候选对象复制到输出数组对应索引位置
          }
        }
      }
    }
  },
  {
    "operation": "remove",
    "spec": {
      "active_candidates_group": {
        "*": {
          "active_candidates_group": ""
        }
      }
    }
  }
]

修正后的Jolt方案

原Spec的问题:shift操作里的@2会把父对象的active_candidates_group字段也复制到结果里,而且后续的remove路径错误,无法清理这个多余字段。下面提供两个可行的修正方案:

方案一:临时存储父对象字段(更稳妥)

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        // 先把父对象中除了active_candidates_group的所有字段存到临时节点
        "*": "tmp_parent.&",
        "active_candidates_group": {
          "*": {
            // 合并临时存储的父对象字段
            "@(2,tmp_parent)": "&2[&1]",
            // 合并当前候选对象的所有字段
            "*": "&2[&1].&"
          }
        }
      }
    }
  },
  {
    // 将合并后的数组作为最终输出
    "operation": "shift",
    "spec": {
      "active_candidates_group": "[]"
    }
  }
]
  • 第一步通过临时节点tmp_parent隔离父对象的非候选数组字段,避免把active_candidates_group带入结果
  • 第二步直接提取合并好的数组作为根输出,结构清晰且避免冗余操作

方案二:直接清理冗余字段(更简洁)

如果确定父对象和候选对象无重复字段,也可以用这个简化写法:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "active_candidates_group": {
          "*": {
            // 复制父对象所有字段
            "@2": "&3[&1]",
            // 复制候选对象字段,覆盖可能的冗余
            "*": "&3[&1].&",
            // 直接移除父对象带来的active_candidates_group字段
            "@2,active_candidates_group": null
          }
        }
      }
    }
  }
]
  • 利用@2,active_candidates_group": null在shift阶段直接清理冗余字段,不需要额外的remove操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:22:02