MuleSoft DataWeave:合并同键不同对象的键值对
问题描述
我有一个对象数组格式的Payload,每个对象中包含一个值为对象数组的键。我需要合并所有匹配的键,并将最底层的值浓缩为一个数组。
示例Payload:
[ { "randomNumbers": [ { "aFewDigits": "124374" } ] }, { "randomNumbers": [ {"aFewDigits": "103865"}, {"aFewDigits": "103868"}, {"aFewDigits": "103739"}, {"aFewDigits": "103866"} ] }, { "randomNumbers": [ {"aFewDigits": "103864"}, {"aFewDigits": "103737"}, {"aFewDigits": "103862"}, {"aFewDigits": "103860"} ] } ]
我尝试了以下DataWeave映射脚本提取值:
%dw 2.0 output application/json --- payload map{ aFewDigits: $..aFewDigits }
得到的结果是:
[ { "aFewDigits": [ "124374" ] }, { "aFewDigits": [ "103865", "103868", "103739", "103866" ] }, { "aFewDigits": [ "103864", "103737", "103862", "103860" ] } ]
而我期望的结果是:
[ { "aFewDigits": [ "124374", "103865", "103868", "103739", "103866", "103864", "103737", "103862", "103860" ] } ]
解决方案
你之前的脚本用map遍历了Payload里的每个对象,所以每个对象都会生成一个包含aFewDigits数组的新对象,最终得到多个对象组成的数组。要实现合并所有值的需求,推荐两种简洁的实现方式:
方式一:深度选择器+扁平化
%dw 2.0 output application/json --- [{ aFewDigits: payload..aFewDigits flatten }]
payload..aFewDigits:用深度选择器(..)递归提取所有层级的aFewDigits值,得到嵌套数组flatten:将嵌套数组转为一维数组,把所有子元素合并到同一个数组中- 外层
[{ }]将结果封装为单对象数组,匹配期望结构
方式二:明确遍历数组
%dw 2.0 output application/json --- [{ aFewDigits: payload flatMap $.randomNumbers map $.aFewDigits }]
payload flatMap $.randomNumbers:遍历每个对象,提取randomNumbers数组并扁平化,得到所有含aFewDigits的对象集合map $.aFewDigits:遍历上述集合,提取每个对象的aFewDigits值,最终得到一维数组
内容的提问来源于stack exchange,提问作者ndtorre
相关产品推荐
相关产品推荐

