2016-09-27 3 views
0

У меня есть поток Mule, который вызывает два REST API, в результате чего получается две полезной нагрузки json list. Мне нужно получить объединенный список json из этих двух полезных нагрузок.Слияние двух полезных данных json с dataweave

Мне удалось добиться этого с помощью потока рассеянных сборок с помощью специальной стратегии агрегатора. Однако код, который я должен был написать для этого, выглядит довольно грязным, и он медленный.

Есть ли способ достичь этого с помощью dataweave `

вход Json список 1:

[{ "ID": "1", "firstName": "JANE""familyName": "DOE", "Entities": [{ "ID": "515785", "name": "UNKOWN UNITED", "callSign": "UU" }] }, { "ID": "2", "firstName": "JOHN", "familyName": "DOE", "Entities": [{ "Entities_ID": "515785", "name": "UNKOWN UNITED", "callSign": "UU" }] }]

вход Json список 2:

[{ "ID": "1", "firstName": "JANE", "familyName": "DOE", "Entities": [{ "Entities_ID": "8916514", "name": "UNKOWN INCORPORATED", "callSign": "UI" }] }, { "ID": "4", "firstName": "JAKE", "familyName": "DOE", "Entities": [{ "Entities_ID": "8916514", "name": "UNKOWN INCORPORATED", "callSign": "UI" }] }]

требуемый выход объединенный список без дубликатов идентификаторов:

[{ "ID": "1", "firstName": "JANE", "familyName": "DOE", "Entities": [{ "Entities_ID": "515785", "name": "UNKOWN UNITED", "callSign": "UU" }, { "Entities_ID": "8916514", "name": "UNKOWN INCORPORATED", "callSign": "UI" }] }, { "ID": "2", "firstName": "JOHN", "familyName": "DOE", "Entities": [{ "Entities_ID": "515785", "name": "UNKOWN UNITED", "callSign": "UU" }] }, { "ID": "4", "firstName": "JAKE", "familyName": "DOE", "Entities": [{ "Entities_ID": "8916514", "name": "UNKOWN INCORPORATED", "callSign": "UI" }] }]

ответ

0

Это работает для меня dataweave где полезной нагрузки песни1 и flowVars.list2 является песни2

%dw 1.0 
%output application/json 
%var mergeddata = flowVars.list2 groupBy $.ID 
--- 
payload map ((data,index) -> { 
    ID: data.ID, 
    firstName : data.firstName, 
    familyName : data.familyName, 
    Entities : data.Entities ++ (mergeddata[data.ID].Entities default []) 
}) ++ 
(flowVars.list2 filter (not (payload.ID contains $.ID))) 

Надеется, что это помогает

+0

Это хорошее началу, однако ResultSet должно иметь слиты лицо, в которых в двух списках есть дубликаты идентификаторов. Как это: '[{ \t "ИД": "1", \t "FirstName": "Jane", \t "FamilyName": "МЭ", \t "Объекты": [{ \t \t" Entities_ID ": "515785", \t \t "имя": "UNKOWN ЮНАЙТЕД", \t \t "Позывной": "UU" \t}, \t { \t \t "Entities_ID": "8916514", \t \t "имя": "UNKOWN INCORPORATED", \t \t "Позывной": "UI" \t}] }] ' –

+0

Я обновил ответ найденную проблему в последнем ответе. – AnupamBhusari

+0

Это похоже на трюк, большое спасибо за вашу помощь! –

Смежные вопросы