Reputation: 1
I want to combine the list of all projects with the same companyName
and companyId
.
I need help processing Data such that it will take all data with the same values for companyName
and companyId
and combine it into its own array.
Input Example Data that I expect will be here:
[{
"companyName": "ABC company",
"companyId": "123",
"projectName": "project1",
"levelCode": "893",
"projectStatus": "2"
},
{
"companyName": "ABC company",
"companyId": "123",
"projectName": "project2",
"levelCode": "1386",
"userId": "183",
"projectStatus": "2"
},
{
"companyName": "ABC company",
"companyId": "123",
"projectName": "project3",
"levelCode": "1655",
"userId": "183",
"projectStatus": "1"
},
{
"companyName": "ABC company",
"companyId": "123",
"projectName": "project4",
"levelCode": "1865",
"userId": "159",
"projectStatus": "2"
}]
Expected Output
After Manipulating all the data: Note that all the projects involving companyName
"ABC company" are now merged into one array (projects).
[
{
"companyName": "ABC company",
"companyId": "123",
"projects": {
"projectName": "project1",
"levelCode": "893",
"projectStatus": "2"
},
{
"projectName": "project2",
"levelCode": "1386",
"userId": "183",
"projectStatus": "2"
},
{
"projectName": "project3",
"levelCode": "1655",
"userId": "183",
"projectStatus": "1"
},
{
"projectName": "project4",
"levelCode": "1865",
"userId": "159",
"projectStatus": "2"
}
}
]
Upvotes: 0
Views: 2938
Reputation: 11
Check this out.
%dw 1.0
%output application/json
---
payload distinctBy $.CompanyName map {
companyName: $.companyName,
companyID: $.companyId,
Projects: payload map {
projectName: $.projectName,
levelCode: $.levelCode,
userId: $.userId,
projectStatus: $.projectStatus
}
}
Upvotes: 1
Reputation: 24
This will work:
%dw 1.0
%output application/json
---
payload distinctBy $.companyName map ((result, IndexOfResult) -> {
companyName: result.companyName,
companyId: result.companyId,
project: payload[?($.companyName == result.companyName)] map {
projectName: $.projectName,
levelCode: $.levelCode,
userId: $.userId,
projectStatus: $.projectStatus
}
})
Upvotes: 1
Reputation: 92
You have GroupBy operator with which this can be done easily. Here you need to group by companyName and companyId payload groupBy $.companyName,companyId
Please read the link below for detailed information about groupby operator. https://docs.mulesoft.com/mule-user-guide/v/3.8/dataweave-operators#group-by
Upvotes: 0