You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MuleSoft DataWeave聚合JSON数组并转换为XML?

MuleSoft DataWeave映射实现客户订单聚合转换

需求说明

需要将给定的JSON订单数组按客户聚合,把同一客户的多个订单合并到对应的客户节点下,最终转换为指定结构的XML。

输入JSON(原输入中Francis的对象缺少逗号,已修正)

[
    {
        "name": "Alex",
        "city": "Rome",
        "id": "1054",
        "orderId": "100054",
        "amount": "3"
    },
    {
        "name": "Jack",
        "city": "Paris",
        "id": "1078",
        "orderId": "107709",
        "amount": "65"
    },
    {
        "name": "Alex",
        "city": "Rome",
        "id": "1054",
        "orderId": "100987",
        "amount": "34"
    },
    {
        "name": "Francis",
        "city": "LosAngeles",
        "id": "1942",
        "orderId": "100454",
        "amount": "19"
    },
    {
        "name": "Robert",
        "city": "London",
        "id": "1685",
        "orderId": "306954",
        "amount": "98"
    }
]

目标XML结构

<?xml version="1.0" encoding="UTF-8"?>
<DeliveryMessage>
    <customer>
        <name>Alex</name>
        <city>Rome</city>
        <id>1054</id>
        <order>
            <orderId>100054</orderId>
            <amount>3</amount>
        </order>
        <order>
            <orderId>100987</orderId>
            <amount>34</amount>
        </order>
    </customer>
    <customer>
        <name>Jack</name>
        <city>Paris</city>
        <id>1078</id>
        <order>
            <orderId>107709</orderId>
            <amount>65</amount>
        </order>
    </customer>
    <!-- 其他客户节点省略 -->
</DeliveryMessage>

DataWeave映射代码

%dw 2.0
output application/xml writeDeclaration=true
---
DeliveryMessage: {
    // 按客户ID分组订单
    (payload groupBy $.id) pluck ((orders, customerId) -> 
        customer: {
            // 提取客户基础信息(同组客户信息一致,取第一个即可)
            name: orders[0].name,
            city: orders[0].city,
            id: customerId,
            // 将同组订单映射为order节点数组
            (orders map (order) -> 
                order: {
                    orderId: order.orderId,
                    amount: order.amount
                }
            )
        }
    )
}

关键逻辑说明

  • groupBy $.id:以客户ID为键,将输入的订单数组分组,得到键为ID、值为对应订单数组的对象
  • pluck:把分组后的键值对转换为数组,方便后续生成<customer>节点列表
  • orders[0].name/city:同一分组下的订单属于同一个客户,直接取第一个订单中的客户信息即可
  • orders map ...:遍历每个分组的订单数组,将每个订单转换为目标XML的<order>节点
  • output application/xml writeDeclaration=true:指定输出格式为XML,并自动生成XML声明头

内容的提问来源于stack exchange,提问作者Claudio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 16:33:17