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

基于JOLT的数组非空判断及PartySales对象生成问询

问题分析与JOLT规则调整方案

核心需求

  • 仅当PartySales.item数组已有其他元素时,才向数组中添加包含key.sourceKey的对象
  • 若PartySales.item数组为空,则输出JSON中不包含PartySales对象

输入JSON

{
  "accountType": "MASTER",
  "AccountInfo": {
    "id": "1234",
    "mcaCountry": "CA",
    "accountRegion": "EMEA",
    "marketRegion": "EMEA"
  }
}

现有JOLT转换规则的问题

  1. 冗余生成partySalesKey字段,完全可以直接复用key字段
  2. 最后一个Shift操作会无条件向PartySales.item插入key.sourceKey对象——即使原item数组为空,也会生成仅含该对象的数组,违反“仅当存在其他元素时才添加”的要求
  3. 当AccountInfo无有效字段生成item元素时,仍会保留空的PartySales结构,不符合“空数组时移除PartySales”的规则

调整后的JOLT转换规则

[
  // 生成key的基础片段
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "accountType": {
        "MASTER": {
          "@2,AccountInfo.id": "key",
          "#Master": "key"
        },
        "OPERATIONAL": {
          "@2,AccountInfo.id": "key",
          "#~": "key"
        }
      }
    }
  },
  // 拼接key为sourceKey格式
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "key": "=join(~,@(1,&))"
    }
  },
  // 生成PartySales的基础item元素(集中到数组第一个位置)
  {
    "operation": "shift",
    "spec": {
      "AccountInfo": {
        "accountRegion": {
          "AMER": {
            "#0001": "PartySales.item[0].IbxRegionCd.RegionCd",
            "#AMER": "PartySales.item[0].IbxRegionCd.RegionDesc"
          },
          "APAC": {
            "#0002": "PartySales.item[0].IbxRegionCd.RegionCd",
            "#APAC": "PartySales.item[0].IbxRegionCd.RegionDesc"
          },
          "EMEA": {
            "#0003": "PartySales.item[0].IbxRegionCd.RegionCd",
            "#EMEA": "PartySales.item[0].IbxRegionCd.RegionDesc"
          }
        },
        "mcaCountry": {
          "@1,mcaCountry": [
            "PartySales.item[0].McaCntryCd.cntryCd",
            "PartySales.item[0].McaCntryCd.cntryDesc"
          ]
        },
        "marketRegion": {
          "AMER": {
            "@1,marketRegion": "PartySales.item[0].RegionCd.RegionDesc",
            "#0001": "PartySales.item[0].RegionCd.RegionCd"
          },
          "APAC": {
            "@1,marketRegion": "PartySales.item[0].RegionCd.RegionDesc",
            "#0002": "PartySales.item[0].RegionCd.RegionCd"
          },
          "EMEA": {
            "@2,marketRegion": "PartySales.item[0].RegionCd.RegionDesc",
            "#0003": "PartySales.item[0].RegionCd.RegionCd"
          }
        }
      },
      "key": "&"
    }
  },
  // 仅当PartySales.item存在元素时,添加sourceKey对象到数组末尾
  {
    "operation": "shift",
    "spec": {
      "PartySales": {
        "item": {
          "*": "&2[&1]",
          "@2,key": "&2[#].key.sourceKey"
        }
      }
    }
  },
  // 移除空的PartySales结构
  {
    "operation": "remove",
    "spec": {
      "PartySales": {
        "item": {
          "": {
            "@(2)": ""
          }
        }
      }
    }
  }
]

调整说明

  1. 移除冗余的partySalesKey字段,直接使用生成好的key字段
  2. 固定基础item元素的索引为0,确保所有基础字段集中在一个对象中
  3. 通过@2,key的引用逻辑,仅在PartySales.item已有元素时,才将key作为新元素插入数组
  4. 最后一步Remove操作检查item数组是否为空,为空则直接移除整个PartySales对象,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:15:53