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

Jolt规范适配单/多元素PartnerFunction数组转换问题求助

Jolt兼容单对象/多元素数组的转换方案

问题说明

现有Jolt转换规范仅能正确处理PartnerFunction为多元素数组的场景,当PartnerFunction为单个对象时转换失败,需兼容两种输入格式。

输入示例

输入1(多元素数组场景)

{
  "CustomerMaster": {
    "Rootnode": {
      "KUNNR": "123",
      "NAME1": "XXXX",
      "LAND1": "SE",
      "SalesArea": {
        "VKORG": "1301",
        "VTWEG": "10",
        "SPART": "00",
        "AUFSD": "",
        "FAKSD": "",
        "LIFSD": "",
        "PartnerFunction": [
          {
            "PARVW": "RE",
            "PARZA": "000",
            "KUNN2": "1231"
          },
          {
            "PARVW": "RE",
            "PARZA": "000",
            "KUNN2": "1232"
          }
        ]
      }
    }
  }
}

输入2(单对象场景)

{
  "CustomerMaster": {
    "Rootnode": {
      "KUNNR": "123",
      "NAME1": "XXXX",
      "LAND1": "SE",
      "SalesArea": {
        "VKORG": "1301",
        "VTWEG": "10",
        "SPART": "00",
        "AUFSD": "",
        "FAKSD": "",
        "LIFSD": "",
        "PartnerFunction": {
          "PARVW": "RE",
          "PARZA": "000",
          "KUNN2": "1231"
        }
      }
    }
  }
}

原有Jolt规范(仅支持多元素数组)

[
  {
    "operation": "shift",
    "spec": {
      "CustomerMaster": {
        "Rootnode": {
          "SalesArea": {
            "PartnerFunction": {
              "*": {
                "@(3,KUNNR)": "[&1].KUNNR",
                "@(3,NAME1)": "[&1].NAME1",
                "@(3,NAME2)": "[&1].NAME2",
                "@(3,NAME3)": "[&1].NAME3",
                "@(3,NAME4)": "[&1].NAME4",
                "@(3,LAND1)": "[&1].LAND1",
                "@(2,VKORG)": "[&1].VKORG",
                "@(2,VTWEG)": "[&1].VTWEG",
                "@(2,SPART)": "[&1].SPART",
                "PARVW": "[&1].PARVW",
                "PARZA": "[&1].PARZA",
                "KUNN2": "[&1].KUNN2"
              }
            }
          }
        }
      }
    }
  }
]

解决方案

在原有转换逻辑前添加cardinality操作,将PartnerFunction统一转换为数组格式(单对象自动包装为数组,多元素数组保持不变),后续复用原有shift逻辑即可兼容两种场景:

[
  // 统一PartnerFunction为数组格式,兼容单对象/多元素数组
  {
    "operation": "cardinality",
    "spec": {
      "CustomerMaster": {
        "Rootnode": {
          "SalesArea": {
            "PartnerFunction": "MANY"
          }
        }
      }
    }
  },
  // 原有shift转换逻辑
  {
    "operation": "shift",
    "spec": {
      "CustomerMaster": {
        "Rootnode": {
          "SalesArea": {
            "PartnerFunction": {
              "*": {
                "@(3,KUNNR)": "[&1].KUNNR",
                "@(3,NAME1)": "[&1].NAME1",
                "@(3,NAME2)": "[&1].NAME2",
                "@(3,NAME3)": "[&1].NAME3",
                "@(3,NAME4)": "[&1].NAME4",
                "@(3,LAND1)": "[&1].LAND1",
                "@(2,VKORG)": "[&1].VKORG",
                "@(2,VTWEG)": "[&1].VTWEG",
                "@(2,SPART)": "[&1].SPART",
                "PARVW": "[&1].PARVW",
                "PARZA": "[&1].PARZA",
                "KUNN2": "[&1].KUNN2"
              }
            }
          }
        }
      }
    }
  }
]

说明

cardinality操作的"MANY"参数会自动处理两种情况:

  • 若PartnerFunction是单对象,将其包装为仅含该对象的数组
  • 若PartnerFunction已是数组,则保持原数组结构不变

这样后续的shift逻辑无需修改,即可对两种输入产生一致的转换结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:44:52