mule - 在 dataweave 中创建具有唯一值的结果数组
问题描述
需要有效地比较两个数组,并使用 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
}
]
解决方案
更新 - 包括 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"
}
]
推荐阅读
- json - Delphi TRESTRequest 在尝试 TRESTRequest.AddBody() 时获取访问冲突
- c# - 默认调用asp按钮的postback方法
- webrtc - CallKit + WebRTC:在 iOS 中按下锁定/电源按钮时 CallKit 通话断开
- javascript - 如何在特定条件下更改 HTML 标签?
- excel - 为什么我看到在 64 位 excel 上运行的计算比在 32 位 excel 上慢大约 5 到 6 倍?
- sql-server - 如何为存储过程声明枚举参数
- reactjs - 通过 child 中的 props 调用 parent 的函数
- react-native - 检查另一个本机反应时自动取消选中复选框
- docker-compose - 如何访问我的 docker-compose 文件中的 entrypoint.sh 值?
- ssis - Azure DevOps - 如何使用 SSIS 从 repo 下载文件