繁体   English   中英

如何在WSO2 ESB中连接JSON数组值?

[英]How to concatenate JSON array values in WSO2 ESB?

我们有如下所示的json对象,预期结果为:“(001),(011),(089),(120)”。

任何人都可以建议如何迭代json数组并按提及的方式连接值。 "(001),(011),(089),(120)"

提前致谢。

{
    "Element": {
        "Values": {
            "AgentID": "aaaaa",
            "TransactionData": [
                {
                    "No": "001"
                },
                {
                    "No": "011"
                },
                {
                    "No": "089"
                },
                {
                    "No": "120"
                }
            ]
        }
    }
}

您可以通过在操作范围内使用迭代介体,过滤介体和属性来实现。 试试这个解决方案。 最后,concat-data属性中将具有(001),(011),(089),(120)值。 我已添加完整的代理服务器,供您参考。

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="StockQuoteProxy"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <payloadFactory media-type="json">
            <format>
{
    "Element": {
        "Values": {
            "AgentID": "aaaaa",
            "TransactionData": [
                {
                    "No": "001"
                },
                {
                    "No": "011"
                },
                {
                    "No": "089"
                },
                {
                    "No": "120"
                }
            ]
        }
    }
}
</format>
            <args/>
         </payloadFactory>
         <iterate continueParent="true"
                  expression="//Element/Values/TransactionData"
                  sequential="true">
            <target>
               <sequence>
                  <property name="data"
                            expression="json-eval($.TransactionData.No)"
                            type="STRING"/>
                  <filter source="boolean(get-property('operation','concat-data'))" regex="false">
                     <then>
                        <property name="concat-data"
                                  expression="fn:concat('(',get-property('data'),')')"
                                  scope="operation"
                                  type="STRING"/>
                     </then>
                     <else>
                        <property name="concat-data"
                                  expression="fn:concat(get-property('operation','concat-data'),',','(',get-property('data'),')')"
                                  scope="operation"
                                  type="STRING"/>
                     </else>
                  </filter>
               </sequence>
            </target>
         </iterate>
         <log level="custom">
            <property name="con-cat-data"
                      expression="get-property('operation','concat-data')"/>
         </log>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </target>
   <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/>
   <description/>
</proxy>

有效负载工厂调解器仅用于模拟您的方案。 如果您的客户端发送此JSON有效负载,则您不需要此有效负载工厂中介者。

筛选器介体用于省略前导逗号字符。 如果不使用过滤器,则结果为,(001),(011),(089),(120) (请注意前导逗号字符)。 当然,可以有其他方法来删除逗号开头。

有关具有操作范围的属性的更多详细信息,请参考内容。

对于这种逻辑,我有时更喜欢脚本介体,因为IMO较容易实现诸如字符串拼接/连接,条件xml / json元素构建等操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM