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

Mule4中使用DataWeave生成多个JSON数组的所有可能组合

Mule 4 DataWeave 动态多数组组合生成实现方案

核心逻辑通过自定义递归函数实现任意数量数组的笛卡尔积计算,无需硬编码数组数量,完美适配3~4个动态输入数组的场景。

实现代码

%dw 2.0
output application/json
// 递归生成任意数量数组的笛卡尔积
fun cartesian(arrays: Array<Array<Any>>): Array<Array<Any>> = 
    if(sizeOf(arrays) == 1) 
        arrays[0] map (item) -> [item]
    else 
        flatten(arrays[0] map (currItem) -> 
            cartesian(arrays[1 to -1]) map (restComb) -> [currItem] + restComb
        )
// 提取输入中所有数组的名称与值对
var arrList = payload pluck ((value, key) -> {name: key as String, items: value})
// 生成所有元素组合
var allCombinations = cartesian(arrList map $.items)
---
// 格式化输出为要求的结构
allCombinations map ((comb, idx) -> {
    ("itenary " ++ (idx + 1)): {
        // 映射每个项的属性
        (comb map ((item, cIdx) -> 
            if(arrList[cIdx].name == "hotels") {"hotelDetails": item}
            else {(arrList[cIdx].name): item}
        )),
        // 计算套餐总成本,自动适配不同成本字段,字符串成本转数值
        TripPackage: sum(comb map (item) -> sum(item filterObject ((v, k) -> k as String matches /.*Cost$/ ) map (v) -> v as Number))
    }
}) reduce ((item, acc = {}) -> acc ++ item)

代码说明

  • 动态适配:自动识别输入中的所有JSON数组,不管是3个、4个还是更多都可以自动生成所有元素的组合,不需要修改代码逻辑
  • 格式兼容:自动将hotels数组的项映射为hotelDetails属性,其他数组名称直接保留为属性名
  • 成本自动计算:自动识别所有字段名带Cost后缀的数值,自动转换字符串类型的成本为数字后累加得到TripPackage

注:你提供的预期输出中的成本数值为示例测试值,代码会按输入的实际数值计算总成本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:09:04