在 dataweave 中创建具有唯一值的结果数组

Creating a resulting array with unique values in dataweave

需要有效地比较两个数组并使用 mule 中的 Dataweave 转换创建第三个数组,其中的值仅在第二个数组中。我想在骡子中使用包含关键字的否定。但它给出了错误。希望我可以使用过滤器和 Contains 来过滤掉值。

arr1 =[
    {
       "leadId": 127,
       "playerId": 334353
    },
     {
       "leadId": 128,
       "playerId": 334354
     },
     {

      "leadId": 123,
       "playerId": 43456
     }
     {

      "leadId": 122,
       "playerId": 43458
     }



arr2 =[
    {
       "leadId": 127,
       "name": "James"
    },
     {
       "leadId": 129,
       "name": "Joseph"
     },
     {

      "leadId": 120,
       "name": "Samuel"
     },
    {

      "leadId": 122,
       "name": "Gabriel",
     }


Need resulting array as

arr3 = [
    {
       "leadId": 129,
       "name": Joseph
    },
     {
       "leadId": 120,
       "name": Samuel
     }


  ]

更新 - 包括 DataWeave 1 和 2

我不确定您是如何存储数组的(在负载或其他变量等中),但下面的脚本应该足以让您继续。仅根据 leadId 进行比较。

转换实际上适用于 DW1 和 DW2,您只需更改 header。

骡子 3 和 DW1

%dw 1.0
%output application/json
---
payload.array2 filter (not (payload.array1.leadId contains $.leadId))

Mule 4 和 DW2

%dw 2.0
output application/json
---
payload.array2 filter (not (payload.array1.leadId contains $.leadId))

输入

{
    "array1": [
        {
            "leadId": 127,
            "playerId": 334353
        },
        {
            "leadId": 128,
            "playerId": 334354
        },
        {
            "leadId": 123,
            "playerId": 43456
        },
        {
            "leadId": 122,
            "playerId": 43458
        }
    ],
    "array2": [
        {
            "leadId": 127,
            "name": "James"
        },
        {
            "leadId": 129,
            "name": "Joseph"
        },
        {
            "leadId": 120,
            "name": "Samuel"
        },
        {
            "leadId": 122,
            "name": "Gabriel"
        }
    ]
}

输出

[
  {
    "leadId": 129,
    "name": "Joseph"
  },
  {
    "leadId": 120,
    "name": "Samuel"
  }
]