【问题标题】:Merge two json payload with dataweave将两个 json 有效负载与 dataweave 合并
【发布时间】:2016-09-27 11:07:28
【问题描述】:

我有一个 Mule 流,它调用两个 REST API,从而产生两个 json 列表有效负载。我需要从这两个payload中获取一个合并的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" }] }]

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

    这适用于我的 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)))
    

    希望对你有帮助

    【讨论】:

    • 这是一个好的开始,但是结果集需要合并实体,其中两个列表中有重复的 ID。像这样:[{ "ID": "1", "firstName": "JANE", "familyName": "DOE", "Entities": [{ "Entities_ID": "515785", "name": "UNKOWN UNITED", "callSign": "UU" }, { "Entities_ID": "8916514", "name": "UNKOWN INCORPORATED", "callSign": "UI" }] }]
    • 我已经更新了最后一个答案中找到的答案问题。
    • 这似乎只是个窍门,非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多