使用WSO2 ESB中的ForEach组件解析JSON响应数组

时间:2017-07-03 12:01:07

标签: wso2 wso2esb wso2carbon

我需要解析包含产品数组(P1,P2,P3等)的JSON响应。每个产品都包含多个信息,如名称,类型,成本等。

我需要逐个阅读每个产品,并将从另一个服务获得的其他数据附加到新的JSON输出中。我正在考虑使用WSO2 ESB的ForEach组件逐个迭代每个产品。

问题是ForEach组件使用ForEachExpression,它在配置中需要XML表达式。

请建议在WSO2 ESB中逐个解析JSON响应数组的方法。

/阿布舍克巴克

1 个答案:

答案 0 :(得分:0)

可以使用Iterate或ForEach介体来迭代JSON数组,因为它们都是内容感知调解器并支持JSON。

使用哪一个取决于具体的用例,因为Iterate提供了在序列中使用call / callout / send mediator的功能,而ForEach不允许它。

对于下面给出的示例JSON请求,以下迭代有效,JSON数组和对象可以像这样引用。

{
   "products":[
      {
         "product":{
            "id":"1234",
            "size":"20",
            "quantity":"1",
            "price":"990",
            "type":"Electronics",
            "store":{
               "id":"001"
            }
         }
      }
   ]
}

<iterate expression="//products" id="PRD_ITR">
    <target>
      <sequence>
        <sequence key="Product_Enrich_Sequence_s"/>
        <!-- For example, Switching sequence based on the product type -->
        <switch source="//products/product/type">
          <case regex="Computer">
            <sequence key="Computer_Product_Enrich_Sequence_s"/>
          </case>
          <case regex="Mobile">
            <sequence key="Mobile_Product_Enrich_Sequence_s"/>
          </case>
          <case regex="Grocery">
            <sequence key="GR_Product_Enrich_Sequence_s"/>
          </case>
          <default>
            <!-- default stuff --!>
          </default>
        </switch>
      </sequence>
    </target>
  </iterate>

FYR

https://docs.wso2.com/display/ESB490/Iterate+Mediator

https://docs.wso2.com/display/ESB490/ForEach+Mediator

注意:在WSO2 ESB 4.9.0中测试