2017-07-03 49 views
0

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

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

问题是ForEach组件使用期望配置中使用XML表达式的ForEachExpression。

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

/阿布舍克

回答

0

可以同时使用迭代或调解员的ForEach迭代为JSON数组,因为两者都是内容感知介质和支持JSON。

要使用哪一个取决于具体的用例,因为迭代提供了在序列中使用呼叫/呼出/发送中介的功能,而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

+0

我需要一个获取每一个产品的价值,然后把它回到单个JSON响应中。 WSO2 ESB是否内部将所有类型的消息类型(如JSON等)转换为XML以供进一步处理? – AbhishekM

+0

是的..它的作品就是这样。将json转换为xml以进行内部处理。您可以将最终响应指定为JSON或通过XSLT或payloadfactory处理它。上述答案是否有效? –

+0

你不觉得它可以严重影响从JSON内部转换为超过8000行的JSON文件到XML的性能吗?同时,我注意到从JSON到XML的内部转换在某种意义上给出错误的结果,正确的XML结构没有得到生成。我们在这里有任何限制吗? – AbhishekM