如何用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
相关产品推荐
相关产品推荐

