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

如何用Jolt为JSON对象添加基于precedingId的precedingValue字段

问题:通过Jolt为每个对象添加precedingValue字段

输入JSON结构:

{
  "1": {
    "precedingId": "0",
    "value": "A"
  },
  "2": {
    "precedingId": "1",
    "value": "B"
  },
  "3": {
    "precedingId": "2",
    "value": "C"
  }
}

期望输出JSON:

{
  "1": {
    "precedingId": "0",
    "precedingValue" : null, // 因为不存在键为0的对象
    "value": "A"
  },
  "2": {
    "precedingId": "1",
    "precedingValue" : "A",
    "value": "B"
  },
  "3": {
    "precedingId": "2",
    "precedingValue" : "B",
    "value": "C"
  }
}

需求说明:每个对象以自身的precedingId作为键,在上一级层级中查找对应对象,若存在则将其value值作为当前对象的precedingValue,不存在则设为null。


实现方案

这个需求完全可以通过Jolt实现,以下是对应的Jolt转换规则:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@": "&", // 保留当前对象的原有字段
        "@(2,@{precedingId}.value)": "&.precedingValue" // 向上两级取precedingId对应的value赋值给precedingValue
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      "*": {
        "precedingValue": null // 给不存在precedingValue的字段设置默认值null
      }
    }
  }
]

规则解释:

  1. Shift操作:
    • @": "&":将每个键(1、2、3)对应的原始对象完整保留到输出的对应键下。
    • @(2,@{precedingId}.value)": "&.precedingValue":@(2,...)表示向上回溯两级(回到根节点),@{precedingId}动态获取当前对象的precedingId值,然后取根节点下该id对应的对象的value,赋值给当前对象的precedingValue字段。如果找不到对应id的对象,这个字段不会被创建。
  2. Default操作:遍历每个对象,给没有precedingValue字段的对象设置默认值null,满足不存在时设为null的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:42:09