使用 WSO2 EI Enrich Mediator 删除 JSON 字段的最佳方法?

问题描述

我有一个像这样的 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 上。我还能怎样才能达到预期的结果?

解决方法

作为 Enrich Mediator 和 PayloadFactory Mediator 的替代方法,您可以使用 Script Mediator 删除属性。给出一个示例,删除 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>
,

如果您的有效载荷只有 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 放入单独的属性中,然后将其作为上下文属性引用。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...