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

请求提供JOLT转换规则:JSON字段值转字段名(去重问题)

问题:JOLT转换重复键值时避免生成数组,保持独立对象结构

需要将指定JSON负载转换为以字段值作为字段名的JSON,当前使用的JOLT规则在字段值不同时有效,但字段值相同时会生成数组,求合适的JOLT规则。

输入JSON负载

{
  "action": {
    "allowPartialSuccess": true,
    "records": [
      {
        "ZuoraSubscriptionExtId": "962041ad-e673-492a-a071-5e0ab74ea001",
        "CPQSubscriptionID__c": "5640029343"
      },
      {
        "ZuoraSubscriptionExtId": "962041ad-e673-492a-a071-5e0ab74ea001",
        "CPQSubscriptionID__c": "5640029343"
      }
    ],
    "type": "update"
  }
}

期望输出JSON负载(已修正语法错误)

{
  "action" : {
    "allowPartialSuccess" : true,
    "records" : [
      {
        "962041ad-e673-492a-a071-5e0ab74ea001" : {
          "CPQSubscriptionID__c" : "5640029343"
        }
      },
      {
        "962041ad-e673-492a-a071-5e0ab74ea001" : {
          "CPQSubscriptionID__c" : "5640029343"
        }
      }
    ],
    "type" : "update"
  }
}

注:原期望输出的JSON存在语法错误(records字段后直接并列多个对象未用数组包裹),已修正为合法格式,确保JSON语法合规。

当前使用的JOLT规则

[
  {
    "operation": "shift",
    "spec": {
      "action": {
        "allowPartialSuccess": "action.allowPartialSuccess",
        "records": {
          "*": {
            "CPQSubscriptionID__c": "action.records.@(1,ZuoraSubscriptionExtId).CPQSubscriptionID__c"
          }
        },
        "type": "action.type"
      }
    }
  }
]

解决方案

原规则的问题在于:当多条记录的ZuoraSubscriptionExtId值重复时,会将对应内容合并到同一个键下形成数组,破坏了原始记录的独立结构。要保留每条记录的独立对象,需利用数组索引来维持每条记录的独立性:

正确的JOLT规则

[
  {
    "operation": "shift",
    "spec": {
      "action": {
        "allowPartialSuccess": "action.allowPartialSuccess",
        "records": {
          "*": {
            "@": "action.records[&1].@(ZuoraSubscriptionExtId)"
          }
        },
        "type": "action.type"
      }
    }
  },
  {
    "operation": "remove",
    "spec": {
      "action": {
        "records": {
          "*": {
            "*": {
              "ZuoraSubscriptionExtId": ""
            }
          }
        }
      }
    }
  }
]

规则解释

  1. Shift操作:通过数组索引[&1]将每条原始记录映射到records数组的对应位置,同时把ZuoraSubscriptionExtId的值作为该位置对象的外层键,包裹当前记录的全部内容。
  2. Remove操作:移除每个对象中多余的ZuoraSubscriptionExtId字段,只保留需要的CPQSubscriptionID__c字段。

效果验证

应用上述规则后,输出的JSON会完整保留原始两条记录的独立对象结构,即使键值重复,也不会合并为数组,与修正后的期望输出完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:25:37