преобразование массива dataweave для объединения данных с одинаковыми значениями ключей

Я хочу объединить список всех проектов с одинаковыми companyName и companyId.

Мне нужна помощь в обработке данных, чтобы она брала все данные с одинаковыми значениями для companyName и companyId и объединяла их в свой собственный массив.

Данные входного примера, которые, как я ожидаю, будут здесь:

[{
    "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"

}]

Ожидаемый результат

После обработки всех данных: Обратите внимание, что все проекты, в которых участвует companyName "ABC company", теперь объединены в один массив (проекты).

[
  {
    "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"
    }
  }
]

person shu    schedule 17.11.2017    source источник
comment
Шу: Обычно в Stackoverflow ожидается, что вы покажете то, что уже пробовали. Документация, на которую вы ссылались, и что, по вашему мнению, может включать этот процесс. Также в будущем будьте более осторожны с форматированием: вы можете выделить полный фрагмент кода, а затем нажать {} или ввести ctrl + k [cmd + k].   -  person Zargold    schedule 18.11.2017


Ответы (2)


Зацените это.

%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
        }
}
person Bharath    schedule 28.05.2018

У вас есть оператор GroupBy, с помощью которого это можно легко сделать. Здесь вам нужно сгруппировать по companyName и companyId группу полезной нагрузкиBy $ .companyName, companyId

Пожалуйста, прочтите ссылку ниже для получения подробной информации об операторе groupby. https://docs.mulesoft.com/mule-user-guide/v/3.8/dataweave-operators#group-by

person Srinivas    schedule 05.03.2018