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 "" })
代码逻辑说明
- 以第一个对象的键集合为基准,保证输出包含全部原始字段
- 用
payload.*$key语法提取输入数组中所有对象对应当前键的所有值,组成新数组 - 过滤掉新数组中值为空字符串的项,取过滤结果的第一个元素作为当前字段的有效值
- 若过滤后数组为空(即所有对象对应字段都是空字符串),默认返回空字符串
如果输入数组中不同对象的键存在差异,可以先收集全量唯一键再处理,通用版本示例如下:
%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
相关产品推荐
相关产品推荐

