我需要解析包含产品数组(P1,P2,P3等)的JSON响应。每个产品都包含多个信息,如名称,类型,成本等。
我需要逐个阅读每个产品,并将从另一个服务获得的其他数据附加到新的JSON输出中。我正在考虑使用WSO2 ESB的ForEach组件逐个迭代每个产品。
问题是ForEach组件使用ForEachExpression,它在配置中需要XML表达式。
请建议在WSO2 ESB中逐个解析JSON响应数组的方法。
/阿布舍克巴克
答案 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中测试