【问题标题】:Best way to remove JSON field using WSO2 EI Enrich Mediator?使用 WSO2 EI Enrich Mediator 删除 JSON 字段的最佳方法?
【发布时间】:2021-07-02 15:29:52
【问题描述】:

我有一个如下所示的 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 上。我还能如何实现预期结果?

【问题讨论】:

    标签: json wso2 wso2ei ei


    【解决方案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>
    

    【讨论】:

    • 我真的不推荐使用 Script 中介,除非你真的别无选择。除了使用更多资源之外,它还可能导致其他问题以及错误处理不是很好。但这是一个合法的选择。
    • 这就是我最终的结果。我确保仅在预先存在该值的情况下才运行脚本,以处理一些潜在的错误。
    【解决方案2】:

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

    &lt;arg evaluator="xml" expression="$ctx:firstName"/&gt;

    【讨论】:

      猜你喜欢
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2013-01-16
      • 1970-01-01
      • 2013-05-16
      相关资源
      最近更新 更多