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

如何在Mule 4中用DataWeave将子键值移至父键(动态键场景)

Mule 4中动态JSON结构转换实现方案

输入JSON

[
    {
        "abc": {
            "s": "123"
        },
        "pqr": {
            "s": "234"
        },
        "xyz": {
            "s": "345"
        }
    },
     {
        "abc": {
            "s": "456"
        },
        "pqr": {
            "s": "567"
        }
    }
]

期望输出JSON

[
    {
        "abc": "123",
        "pqr": "234",
        "xyz": "345"
    },
     {
        "abc": "456",
        "pqr": "567",
        "xyz": null
    }
]

实现思路与步骤

由于输入JSON的键是动态的,且数组内不同对象可能缺失部分键,需要先收集所有可能出现的键,再统一映射转换:

  1. 提取所有唯一键:遍历输入数组的全部对象,取出所有属性名并去重,确保覆盖所有潜在键(如abc、def、pqr、mno、xyz等)。
  2. 逐个转换对象:对原数组中的每个对象,遍历所有唯一键,若对象存在该键则取其嵌套的s属性值,不存在则赋值为null。

DataWeave 脚本实现

在Mule 4的Transform组件中使用以下代码:

%dw 2.0
output application/json
// 提取所有唯一键集合
var allKeys = payload flatMap ((item) -> item pluck $$) distinctBy $
---
payload map ((item) -> 
    allKeys reduce ((key, acc = {}) -> 
        acc ++ { (key): item[key]?.s default null }
    )
)

代码说明

  • allKeys:通过flatMap遍历每个对象,pluck $$提取对象的所有键名,再用distinctBy $去重,得到完整的键集合。
  • payload map:遍历原数组中的每个待转换对象。
  • allKeys reduce:遍历所有唯一键,动态构建新对象:(key)实现动态键名,item[key]?.s安全访问嵌套属性,default null保证缺失键时赋值为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:25:17