我需要解析包含产品数组(P1,P2,P3等)的JSON响应。每个产品都包含多个信息,如名称,类型,成本等。在WSO2 ESB中使用ForEach组件解析JSON响应数组
我需要逐一读取每个产品,并将从另一个服务获取的附加数据附加到新的JSON输出中。我正在考虑使用WSO2 ESB的ForEach组件逐个迭代每个产品。
问题是ForEach组件使用期望配置中使用XML表达式的ForEachExpression。
请建议在WSO2 ESB中逐个解析JSON响应数组的方法。
/阿布舍克
我需要解析包含产品数组(P1,P2,P3等)的JSON响应。每个产品都包含多个信息,如名称,类型,成本等。在WSO2 ESB中使用ForEach组件解析JSON响应数组
我需要逐一读取每个产品,并将从另一个服务获取的附加数据附加到新的JSON输出中。我正在考虑使用WSO2 ESB的ForEach组件逐个迭代每个产品。
问题是ForEach组件使用期望配置中使用XML表达式的ForEachExpression。
请建议在WSO2 ESB中逐个解析JSON响应数组的方法。
/阿布舍克
可以同时使用迭代或调解员的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
我需要一个获取每一个产品的价值,然后把它回到单个JSON响应中。 WSO2 ESB是否内部将所有类型的消息类型(如JSON等)转换为XML以供进一步处理? – AbhishekM
是的..它的作品就是这样。将json转换为xml以进行内部处理。您可以将最终响应指定为JSON或通过XSLT或payloadfactory处理它。上述答案是否有效? –
你不觉得它可以严重影响从JSON内部转换为超过8000行的JSON文件到XML的性能吗?同时,我注意到从JSON到XML的内部转换在某种意义上给出错误的结果,正确的XML结构没有得到生成。我们在这里有任何限制吗? – AbhishekM