2017-07-03 74 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