组合对象数组的相同键的值

问题描述

我有以下输入数据

[
  {
    "key": "a","value": [
      "1"
    ]
  },{
    "key": "a","value": [
      "2"
    ]
  },{
    "key": "b","value": [
      "3"
    ]
  }
]

并希望将这些值合并到一个数组中,并按相同的键分组。即以下所需的输出

[
  {
    "key": "a","value": [
      "1","2"
    ]
  },"value": [
      "3"
    ]
  }
]

感谢您的帮助!

解决方法

一种选择是使用 groupBy,然后像这样容纳您获得的组:

valuesOf(payload groupBy ((item,index) -> item.key)) 
    map ((group,index) -> {
    "key": group[0].key,"value": flatten(group.value)
})

这将产生您共享的输出。

,

类似的方法。函数的用法有点不同。

%dw 2.0
output application/json
---
payload groupBy ($."key") mapObject {
    "key": $[0].key,"value": $ map {
        temp: $.value[0]
    }.temp
}