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

如何用Jolt在同数组内复制指定对象并修改键名(带条件)

Jolt规则实现指定条件下的对象复制与修改

需求说明

  • 在目标数组内,找到condition为user-prefs.conditions.rlThreshold的对象,复制一份并将新对象的condition改为user-prefs.conditions.rlThreshold-new
  • 复制仅在对象的values包含stoplevel.requested等指定值时执行;如果values是stoplevel.appointment,则不执行复制

输入示例

{
  "rules": [
    {
      "condition": "user-prefs.conditions.rlThreshold",
      "values": ["stoplevel.requested"]
    },
    {
      "condition": "user-prefs.conditions.rlThreshold",
      "values": ["stoplevel.appointment"]
    },
    {
      "condition": "some-other-condition",
      "values": ["stoplevel.requested"]
    }
  ]
}

期望输出

{
  "rules": [
    {
      "condition": "user-prefs.conditions.rlThreshold",
      "values": ["stoplevel.requested"]
    },
    {
      "condition": "user-prefs.conditions.rlThreshold-new",
      "values": ["stoplevel.requested"]
    },
    {
      "condition": "user-prefs.conditions.rlThreshold",
      "values": ["stoplevel.appointment"]
    },
    {
      "condition": "some-other-condition",
      "values": ["stoplevel.requested"]
    }
  ]
}

正确Jolt转换规则

[
  {
    "operation": "shift",
    "spec": {
      "rules": {
        "*": {
          // 保留原对象到结果数组
          "@": "rules[]",
          // 只处理condition为目标值的对象
          "condition": {
            "user-prefs.conditions.rlThreshold": {
              // 检查values是否符合复制条件
              "@(2,values)": {
                // 匹配包含stoplevel.requested的values(支持多值场景)
                "*stoplevel.requested*": {
                  // 构造新对象的condition值
                  "#user-prefs.conditions.rlThreshold-new": "temp.condition",
                  // 复用原对象的values
                  "@(3,values)": "temp.values",
                  // 将新对象加入结果数组
                  "$temp": "rules[]"
                },
                // 匹配到stoplevel.appointment时不做任何操作
                "*stoplevel.appointment*": {}
              }
            }
          }
        }
      }
    }
  },
  {
    // 清理临时生成的temp节点
    "operation": "remove",
    "spec": {
      "temp": ""
    }
  }
]

规则解析

  1. Shift操作核心逻辑:
    • 先把所有原数组元素原样保留到rules[]
    • 仅针对condition为user-prefs.conditions.rlThreshold的对象,进一步检查values:
      • 如果values包含stoplevel.requested,则构造一个新对象,替换condition值后加入rules[]
      • 如果values是stoplevel.appointment,则跳过复制步骤
  2. Remove操作:清理转换过程中生成的临时temp节点,保证输出结构干净

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:52:47