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

Jolt转换:为存在的节点添加缺失键默认值,避免冗余节点

解决Jolt JSON转换中动态节点的默认值设置问题

输入请求Payload

{
  "attributes": {
    "training": {
      "attr1": "somevalue",
      "attr2": "somevalue"
    },
    "services": [
      {
        "recommendedService": "medical",
        "providedOrInitiated": 1
      },
      {
        "recommendedService": "engineering",
        "providedOrInitiated": 0
      }
    ]
  }
}

期望输出Payload

{
  "attributes": {
    "training": { // 仅当请求中接收该节点时转换
      "training1": "somevalue",
      "training2": "somevalue"
    },
    "services": { // 仅当请求中接收该节点时转换
      "medicalProvided": 1,
      "engineeringProvided": 0,
      "caProvided": 0, // 未在请求中接收的缺失键全部设为0
      "doctorProvided": 0,
      "teacherProvided": 0
    }
  }
}

当前Jolt转换Spec

[
  {
    "operation": "shift",
    "spec": {
      "attributes": {
        "ParentID": "customAttributesMap.ParentID",
        "training": {
          "attr1": "attributes.training.training1",
          "attr2": "attributes.training.training2"
        },
        "services": {
          "*": {
            "recommendedService": {
              "medical": {
                "@(2,providedOrInitiated)": "attributes.services.medicalProvided"
              },
              "engineering": {
                "@(2,providedOrInitiated)": "attributes.services.engineeringProvided"
              }
// 如何为缺失的输入字段设置默认值
            }
          }
        }
      }
    }
  }
]

核心需求

  • 仅转换请求中存在的节点,不存在的节点不生成输出
  • 当services节点存在时:请求中已有的服务映射为XXProvided并赋值对应providedOrInitiated值;预设的缺失服务(ca、doctor、teacher)默认设为0
  • 拒绝使用default操作,因为它会在请求无services节点时强制生成相关键

解决方案

结合shift完成基础映射,再通过modify-overwrite-beta做条件化默认值填充,确保仅在services节点存在时才补充默认值:

[
  // 第一步:完成基础节点映射,仅保留输入中存在的节点
  {
    "operation": "shift",
    "spec": {
      "attributes": {
        "ParentID": "customAttributesMap.ParentID",
        "training": {
          "attr1": "attributes.training.training1",
          "attr2": "attributes.training.training2"
        },
        "services": {
          "*": {
            "recommendedService": {
              "medical": {
                "@(2,providedOrInitiated)": "attributes.services.medicalProvided"
              },
              "engineering": {
                "@(2,providedOrInitiated)": "attributes.services.engineeringProvided"
              }
            }
          }
        }
      }
    }
  },
  // 第二步:仅当services节点存在时,为缺失服务设置默认值0
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "attributes": {
        "services": {
          "caProvided": ["=notNull(@(1,caProvided))", 0],
          "doctorProvided": ["=notNull(@(1,doctorProvided))", 0],
          "teacherProvided": ["=notNull(@(1,teacherProvided))", 0]
        }
      }
    }
  }
]

方案说明

  1. shift操作:严格按照输入节点生成映射结果,输入中不存在的节点(如无training或services)不会在输出中生成对应结构
  2. modify-overwrite-beta操作:通过notNull函数判断目标键是否已存在,不存在则赋值为0。由于该操作仅针对attributes.services路径生效,若输入无services节点,此路径不存在,操作不会触发,避免生成多余节点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:10:28