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

Mule | DataWeave 如何合并两个JSON对象取有效属性得到目标输出

DataWeave 数组合并取有效值转换方案

需求说明

输入为包含多个结构一致对象的数组,需要合并为单个对象,每个字段优先取数组中非空字符串的有效值,若所有对象对应字段均为空字符串则保留空字符串。

输入数据

[
    {
        "Name": "",
        "Age": 30,
        "Color": "",
        "Height": ""
    },
    {
        "Name": "",
        "Age": "",
        "Color": "",
        "Height": 5.6
    }
]

转换代码(DataWeave 2.0)

%dw 2.0
output application/json
---
// 遍历所有原始键,逐个提取有效值
payload[0] mapObject ((value, key) -> {
    (key): (payload.*$key filter ($ != ""))[0] default ""
})

代码逻辑说明

  1. 以第一个对象的键集合为基准,保证输出包含全部原始字段
  2. 用payload.*$key语法提取输入数组中所有对象对应当前键的所有值,组成新数组
  3. 过滤掉新数组中值为空字符串的项,取过滤结果的第一个元素作为当前字段的有效值
  4. 若过滤后数组为空(即所有对象对应字段都是空字符串),默认返回空字符串

如果输入数组中不同对象的键存在差异,可以先收集全量唯一键再处理,通用版本示例如下:

%dw 2.0
output application/json
var allKeys = payload flatMap keysOf($) distinctBy $
---
allKeys reduce ((key, acc={}) -> acc ++ {
    (key): (payload.*$key filter ($ != ""))[0] default ""
})

输出结果

{
  "Name": "",
  "Age": 30,
  "Color": "",
  "Height": 5.6
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:06:04