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

基于Jolt实现主对象无对应属性时从次对象引入属性

Jolt配置修正:仅当Account无对应属性时从SystemResponse补充字段

需求说明

要实现:只有Account.AccountInfo里没有的属性,才从SystemResponse映射过来并转换格式:

  • SystemResponse.serviceFlag → Account.AccountInfo.isService(原Account无此属性,需添加,"true"转1,"false"转0)
  • SystemResponse.resellerFlag → Account.AccountInfo.isReseller(原Account已有该属性,忽略)
  • SystemResponse.poRequiredFlag → Account.AccountInfo.poRequired(原Account已有该属性,忽略)

输入JSON

{
  "Account": {
    "AccountInfo": {
      "isReseller": 10,
      "poRequired": 10
    }
  },
  "SystemResponse": {
    "resellerFlag": "false",
    "poRequiredFlag": "false",
    "serviceFlag": "true"
  }
}

原有配置的问题

  1. 属性存在性判断逻辑错误:用@Account.AccountInfo.isService这种路径判断时,属性不存在就取不到值,导致后续赋值逻辑完全不触发
  2. 路径写错:resellerFlag的处理错误指向了partyAccount.eqxAccountInfo.isReseller,和目标路径不符
  3. 条件逻辑颠倒:现有配置是先判断serviceFlag的值,再检查属性是否存在;正确逻辑应该是先检查属性是否不存在,再根据serviceFlag赋值

修正后的Jolt配置

[
  // 第一步:完整保留原Account的所有属性
  {
    "operation": "shift",
    "spec": {
      "Account": "Account"
    }
  },
  // 第二步:仅当目标属性不存在时,从SystemResponse取值并转换
  {
    "operation": "default",
    "spec": {
      "Account": {
        "AccountInfo": {
          // 当isService不存在时,把serviceFlag的字符串转成数字
          "isService": "${SystemResponse.serviceFlag:true:1,false:0}"
        }
      }
    }
  },
  // 第三步:清理掉不需要的SystemResponse对象
  {
    "operation": "remove",
    "spec": {
      "SystemResponse": ""
    }
  }
]

配置逻辑解释

  • shift操作:先把原Account完整保留下来,确保已有属性isReseller、poRequired不丢失
  • default操作:Jolt的default操作天生就是用来处理「属性不存在时才赋值」的场景,完全匹配需求。这里用${}变量语法,把SystemResponse.serviceFlag的字符串值映射成数字:"true"对应1,"false"对应0
  • remove操作:把输入里的SystemResponse删掉,让输出更干净

最终输出(符合预期)

{
  "Account" : {
    "AccountInfo" : {
      "isReseller" : 10,
      "poRequired" : 10,
      "isService" : 1
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:50:24