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

如何使用WSO2 Enrich Mediator动态添加JSON元素?

解决JSON Payload添加orderSource元素的问题

嘿,我来帮你搞定这个问题!你现在的需求是给现有的JSON请求payload添加orderSource元素,而且已经把值捕获到属性里了,只是当前的处理流程有点小问题,咱们来调整一下~

你的代码问题分析

你当前的代码先把messageType设为application/xml,试图用XML的XPath来处理JSON结构,之后再转回JSON。这种XML-JSON来回转换的方式很容易导致结构错乱,而且没必要——咱们可以直接针对JSON结构操作,省去转换步骤。

修正方案(两种可选)

方案1:用PayloadFactory直接构建新JSON(推荐)

这种方式直接把原有JSON内容和orderSource元素合并,逻辑清晰,不容易出错:

<!-- 保留你已写好的属性捕获步骤 -->
<property expression="get-property('orderSourceSF')" name="orderSource" scope="default" type="STRING"/>

<!-- 保持messageType为JSON,不需要切换到XML -->
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>

<!-- 用PayloadFactory合并原有request内容和新的orderSource元素 -->
<payloadFactory media-type="json">
    <!-- 这里的格式根据你原有JSON结构调整:如果orderSource是根节点下的元素,就用这个格式 -->
    <format>{"request": $1, "orderSource": "$2"}</format>
    <args>
        <!-- 用JSONPath提取原有request的全部内容 -->
        <arg evaluator="json" expression="$.request"/>
        <!-- 引用已捕获的orderSource属性值 -->
        <arg evaluator="xml" expression="get-property('orderSource')"/>
    </args>
</payloadFactory>

如果你的需求是把orderSource加到request对象内部(比如原有request是{"request": {"name": "test"}},要变成{"request": {"name": "test", "orderSource": "xxx"}}),只需要调整payloadFactory的格式:

<payloadFactory media-type="json">
    <format>{"request": {"name": "$1", "orderSource": "$2"}}</format>
    <args>
        <arg evaluator="json" expression="$.request.name"/>
        <arg evaluator="xml" expression="get-property('orderSource')"/>
    </args>
</payloadFactory>

方案2:用Enrich直接给JSON节点添加元素

如果原有JSON结构比较复杂,不想逐个字段写,也可以用enrich结合JSONPath来插入元素:

<property expression="get-property('orderSourceSF')" name="orderSource" scope="default" type="STRING"/>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>

<!-- 将orderSource属性的值作为子元素添加到request对象中 -->
<enrich>
    <source type="property" property="orderSource"/>
    <!-- 用json-eval()指定JSON路径,这里是给request对象加子元素 -->
    <target action="child" xpath="json-eval($.request)"/>
</enrich>

关键注意点

  • 始终保持messageType为application/json,避免XML-JSON转换带来的结构问题;
  • 处理JSON时用JSONPath(比如$.request),而不是XML的XPath;
  • 如果用payloadFactory,字符串类型的属性值要加双引号(比如"$2"),确保生成的JSON格式合法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:53:16