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

基于动态键获取映射值的Jolt转换问题

问题描述

现有输入JSON:

{
  "searchType": "SR",
  "searchTypeMap": {
    "SR":"CREDIT_APPLICATION",
    "SQ":"CREDIT_QUOTATION",
    "DR": "DIRECTOR_CREDIT_SEARCH"
  }
}

需要根据searchType字段的动态值(运行时可为SR、SQ、DR等),从searchTypeMap中匹配对应值并新增searchTypeValue字段,预期输出如下:

{
  "searchType": "SR",
  "searchTypeValue": "CREDIT_APPLICATION",
  "searchTypeMap": {
    "SR":"CREDIT_APPLICATION",
    "SQ":"CREDIT_QUOTATION",
    "DR": "DIRECTOR_CREDIT_SEARCH"
  }
}

目前通过硬编码键值SR的Jolt Shift规则可实现需求:

[
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "searchTypeMap": {
        "SR": {
          "@": "searchTypeValue",
          "@(1,&)": "searchTypeMap.&"
        },
        "*": {
          "@": "searchTypeMap.&"
        }
      }
    }
  }
]

但使用动态键@(1,searchType)的规则无法得到预期输出,寻求正确的Jolt转换方案。

正确Jolt转换方案

方案一:两步Shift操作

先提取searchType对应的映射值,再合并原输入的所有字段,具体规则如下:

[
  // 第一步:提取目标映射值
  {
    "operation": "shift",
    "spec": {
      "searchTypeMap": {
        "@(1,searchType)": "searchTypeValue"
      }
    }
  },
  // 第二步:合并原字段与新生成的searchTypeValue
  {
    "operation": "shift",
    "spec": {
      "@(0,searchTypeValue)": "searchTypeValue",
      "@(1,searchType)": "searchType",
      "@(1,searchTypeMap)": "searchTypeMap"
    }
  }
]

方案二:单步Shift操作(更简洁)

通过通配符配合条件判断,在保留所有原有字段的同时动态匹配生成searchTypeValue:

[
  {
    "operation": "shift",
    "spec": {
      "*": "&", // 保留原有所有字段
      "searchTypeMap": {
        "*": {
          "@": "searchTypeMap.&", // 保留searchTypeMap的所有键值对
          // 当当前键等于上层的searchType时,赋值给searchTypeValue
          "$(1,searchType)": {
            "$": {
              "@2": "searchTypeValue"
            }
          }
        }
      }
    }
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:13:08