如何通过Mule将结果聚合到JSON对象中

时间:2014-10-23 15:29:43

标签: json mule mule-studio mule-component

我正在使用Mule 3.4,并且我有一个Mule流,它遍历有效负载中的行项目,将每个行项目单独传递给Web服务,并为每个行项目返回JSON响应。

我想知道的是,如果Mule中有一种方法可以将这些响应聚合到一个大型JSON对象中,并将其作为响应返回。

谢谢,

2 个答案:

答案 0 :(得分:2)

虽然每个方法的Ryan都可以使用(在我看来并不是很多好的选项),但如果第二个Web服务调用1000个订单项中的订单项,则最好弄清楚如何处理错误出于某种原因的例外...

请咨询Ryan Carter的其他答案:How to catch exceptions in the Mule foreach scope but keep the process going?

在我的用例中,我的有效负载是一个字符串列表,其中每个字符串都是表示订单的json。我选择了一个自定义的java变换器(不允许在表达式转换器中使用groovy)并且只是这样制作了我的json。不是最好的解决方案,但似乎是邪恶的较小。

Groovy会像(根本没有测试过):

#[groovy: '{"orders":[' + payload.join(', ') + ']}'] 

答案 1 :(得分:1)

对于每个项目,如果您使用<json:json-to-object-transformer returnClass="java.util.HashMap" />

将json转换为地图

这应该会为您提供一系列地图。然后在你的foreach / loop之外,将地图列表转换回json,这将使用以下内容为您提供一个json数组:<json:object-to-json-transformer />

例如:

<foreach>
  <!--call service - returns {"id" : "1"} then {"id" : "2"} etc.-->
  <json:json-to-object-transformer returnClass="java.util.HashMap" />`
</foreach>

<json:object-to-json-transformer />

<!-- should output [{"id" : "1"}, {"id" : "2"}] -->