Dataweave Script for Grouping Multiple Value of Same Key

Author: Abhishek Bathwal

The blog will help you to write a script for grouping Multiple values associated with the same Key.

 

Input (In CSV format):
Id,Value
1,a
2,b
3,c
1,d
2,e
3,f
1,g

In the above input, Id – 1,2,3 are repeating with different values. We will check a dataweave script to group all these values to their respective Id.

 

Dataweave Script:
%dw 2.0
output application/json
---
(payload groupBy ((item,index) -> item.Id) mapObject ((val, key) ->
   group : {
       Id : key,
       Value : val.Value joinBy ","
})).*group
Output:
[
 {
   "Id": "1",
   "Value": "a,d,g"
 },
 {
   "Id": "2",
   "Value": "b,e"
 },
 {
   "Id": "3",
   "Value": "c,f"
 }
]

Note: Same Script can be used for dataweave version 1.

If any specific value is required on the basis of occurrence like the First Value or the Last value from the list for the key then an index can be used for that.

For getting the first value:
%dw 2.0
output application/json
---
(payload groupBy ((item, index) -> item.Id) mapObject ((val, key) ->
   group : {
       Id : key,
       Value : (val.Value joinBy ",")[0]
}) orderBy ($.Id)).*group
Output:
[
 {
   "Id": "1",
   "Value": "a"
 },
 {
   "Id": "2",
   "Value": "b"
 },
 {
   "Id": "3",
   "Value": "c"
 }
]
For getting last value:
%dw 2.0
output application/json
---
(payload groupBy ((item, index) -> item.Id) mapObject ((val, key) ->
   group : {
       Id : key,
       Value : (val.Value joinBy ",")[-1]
}) orderBy ($.Id)).*group
Output:
[
 {
   "Id": "1",
   "Value": "g"
 },
 {
   "Id": "2",
   "Value": "e"
 },
 {
   "Id": "3",
   "Value": "f"
 }
]

 

We use cookies on this site to enhance your user experience. For a complete overview of how we use cookies, please see our privacy policy.