使用 dataweave 合并两个 json 有效负载

Merge two json payload with dataweave

我有一个 Mule 流调用两个 REST API 导致两个 json 列表有效负载。我需要从这两个有效负载中获取合并的 json 列表。

我设法通过带有自定义聚合器策略的分散-聚集流程实现了这一点。然而,我必须为此编写的代码看起来相当混乱而且速度很慢。

有没有什么方法可以使用 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 的合并列表:

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

这对我适用于 dataweave,其中 payload 是 list1,flowVars.list2 是 list2

%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)))

希望对您有所帮助