首页 > 解决方案 > Mule 4 中的 ForEach 聚合

问题描述

我想汇总 For Each 每次迭代的响应。在每次迭代中,我都会获取 Json 数据,并且我想将该 Json 数据聚合到 Json Array/List 中。请让我知道如何通过在 Transform 中使用数据编织或任何其他方式来做到这一点?

下面是我在 For Each 的每次迭代中获得的示例 Json 数据。

1st iteration:
{
    "accountId": "12345",
    "accountNumber": "999",
    "accountTitle": "ABC"
}

2nd iteration:
{
    "accountId": "98765",
    "accountNumber": "888",
    "accountTitle": "XYZ"
}

I want final aggregated output as below.  
{
  accountList: [
    {
        "accountId": "12345",
        "accountNumber": "999",
        "accountTitle": "ABC"
    },
    {
        "accountId": "98765",
        "accountNumber": "888",
        "accountTitle": "XYZ"
    }
  ]
}

标签: muledataweave

解决方案


你可以关注类似的东西

<!-- Define blank arraylist for aggregation -->
        <dw:transform-message doc:name="Transform Message">
            <dw:set-variable variableName="result"><![CDATA[%dw 1.0
%output application/java
---
[]]]></dw:set-variable>
        </dw:transform-message>
        <foreach doc:name="For Each">
            <!-- generate response using flow logic and add following step for updating result array -->
            <dw:transform-message doc:name="Transform Message">
                <dw:set-variable variableName="result"><![CDATA[%dw 1.0
%output application/java
---
flowVars.result ++ [payload]]]></dw:set-variable>
            </dw:transform-message>
        </foreach>
        <!-- Transform aggregated result to any format. I used JSON -->
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
accountList : flowVars.result]]></dw:set-payload>
        </dw:transform-message>

我使用了 Mule 3.x 语法。对于 mule 4,您可以使用attribute而不是variable用于存储记录。除了将 Dataweave 语言版本从 更改为 之外,Dataweave 语法将保持1.0不变2.0

希望这可以帮助。


推荐阅读