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

在WSO2配置语言中实现数据类型对象间的转换

解决WSO2中JSON输入到目标结构的转换问题

我懂你这种挫败感——用DataMapper和Enrich Mediator折腾半天,就是搞不定输入JSON到目标结构的转换对吧?其实这俩工具在处理这种简单字段映射+根节点重组的场景时,反而不如PayloadFactory或者Script Mediator来得直接。咱们直接上可行的方案:

方案1:用PayloadFactory Mediator(推荐,结构固定时首选)

PayloadFactory专门用来构建新的消息 payload,特别适合这种字段一一对应、结构明确的转换。你只需要把输入里的字段通过JSONPath引用到新的JSON结构里就行。

配置示例:

<payloadFactory media-type="json">
    <format>
        {
            "BalanceEnquiryRequest": {
                "channel": null,
                "type": "$1",
                "customerId": "$2",
                "customerIdType": null,
                "submissionTime": null,
                "reqTranId": "$3",
                "passcode": null
            }
        }
    </format>
    <args>
        <arg evaluator="json" expression="$.requestMode"/>
        <arg evaluator="json" expression="$.agentAccountNumber"/>
        <arg evaluator="json" expression="$.requestID"/>
    </args>
</payloadFactory>

解释:

  • <format>里是你要的目标JSON结构,用$1、$2这种占位符对应后面的参数
  • <args>里通过JSONPath从输入payload里提取对应的值:
    • $.requestMode对应目标里的type
    • $.agentAccountNumber对应customerId
    • $.requestID对应reqTranId
  • 那些固定为null的字段直接写死在format里就行

方案2:用Script Mediator(JavaScript,灵活场景适用)

如果之后需要加一些逻辑判断,用JavaScript脚本会更灵活。直接解析输入JSON,构建新的JSON对象再输出。

配置示例:

<script language="js"><![CDATA[
    // 解析输入JSON
    var input = JSON.parse(mc.getPayloadJSON());
    // 构建目标结构
    var output = {
        "BalanceEnquiryRequest": {
            "channel": null,
            "type": input.requestMode,
            "customerId": input.agentAccountNumber,
            "customerIdType": null,
            "submissionTime": null,
            "reqTranId": input.requestID,
            "passcode": null
        }
    };
    // 设置新的payload
    mc.setPayloadJSON(output);
]]></script>

解释:

  • 先把输入payload转成JavaScript对象,直接通过属性访问提取值
  • 按照目标结构创建新对象,把对应字段赋值进去
  • 最后把新对象设置为当前消息的payload

为什么之前的工具没成功?

  • DataMapper:可能是你在映射时没正确处理根节点的层级(输入是扁平结构,输出是嵌套的BalanceEnquiryRequest根节点),或者字段映射时没选中正确的JSON路径,导致生成的payload结构不对。
  • Enrich Mediator:Enrich更适合合并、替换部分payload,要实现这种全结构重组需要多次clone+replace操作,步骤繁琐很容易出错,反而不如上面两种方法高效。

你可以把上面的任意一种配置加到你的序列(Sequence)里,放在接收输入之后的位置,就能得到你想要的输出了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:17:37