0

需要有效地比较两个数组,并使用 mule 中的 Dataweave 转换创建第三个数组,其中的值仅在第二个数组中。我想在 mule 中使用 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
     }


  ]

4

1 回答 1

1

更新 - 包括 DataWeave 1 和 2

我不确定您是如何存储数组的(在有效负载或其他变量等中),但下面的脚本应该足以让您继续。比较是基于leadId唯一的。

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

骡子 3 和 DW1

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

骡子 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"
  }
]
于 2019-05-02T03:27:33.313 回答