1

我有一个如下所示的 JSON 对象:

{"firstName":"Todd","lastName":"Jones","age":32}

我的问题是如何删除年龄字段?我正在查看 Enrich Mediator 文档,并注意到一个从有效负载中删除选定部分的示例:

示例 7 - 从有效负载中删除选定的部分(此功能可从 EI 6.6.0 WUM 级别 1595516738094 获得)

    <target>
       <inSequence>
         <enrich>
            <source clone="true" xpath="json-eval($.store.book[*].author,$.store.book[0])"/>
            <target type="body" action="remove"/>
         </enrich>
         <respond/>
      </inSequence>
      <outSequence/>
    </target>

但是,这对我不起作用,因为它在 EI 6.6.0 上可用,而我在 EI 6.1.1 上。我还能如何实现预期的结果?

4

2 回答 2

1

作为EnrichMediator 和PayloadFactoryMediator 的替代方法,您可以使用ScriptMediator 删除属性。给定是一个样本,删除age属性

<property name="JSONPayload" expression="json-eval($.)" />
<script language="js">
    <![CDATA[
        // var log = mc.getServiceLog();
        
        var response = mc.getProperty("JSONPayload");
        var jsonPayload = JSON.parse(response);
        delete jsonPayload['age'];

        // log.info(JSON.stringify(jsonPayload));

        mc.setPayloadJSON(jsonPayload);
    ]]>
</script>
于 2021-07-05T10:47:27.017 回答
0

如果您的有效负载只有 3 个元素,我认为您可以使用有效负载工厂。

           <payloadFactory media-type="json">
                <format>
                    {"firstName":"$1","lastName":"$2"}

                </format>
                <args>
                    <arg evaluator="json" expression="$.firstName"/>
                    <arg evaluator="json" expression="$.lastName"/>
                </args>
            </payloadFactory>

您可能必须为此启用 JSON 流格式化程序/构建器,如此处所述。https://docs.wso2.com/display/EI611/PayloadFactory+Mediator

如果上述方法不起作用,您也可以先将 firstName 和 lastName 放入单独的属性中,然后将其作为上下文属性引用。

IE<arg evaluator="xml" expression="$ctx:firstName"/>

于 2021-07-05T06:28:52.653 回答