Mule 4:Dataweave:如何过滤和更新列表中的匹配对象?
Mule 4 : Dataweave : How to filter, and update a matched object in a list?
场景:我有一个学生列表。我想过滤具有特定 studentId 的学生并更新其标记以在列表中显示 60。如果不使用 Mule 4.3
中引入的“更新”运算符,我该如何做到这一点
学生名单:
[
{
"studentId": "781e5dc2-f76b-4e35-ac27-f5835c960083",
"studentName": "Mr. 1",
"studentMarks": 1
},
{
"studentId": "cb8a606a-b91c-4697-8d73-84170b156180",
"studentName": "Mr. 2",
"studentMarks": 4
},
{
"studentId": "656b247f-a755-476f-a845-b61d28e4be79",
"studentName": "Mr. 3",
"studentMarks": 9
},
{
"studentId": "d1cd5ee3-cef6-4d5e-a380-cb5e79495f77",
"studentName": "Mr. 4",
"studentMarks": 16
}
]
要更新为60分的学生studentId为:656b247f-a755-476f-a845-b61d28e4be79
所以更新后的最终结果应该是:
[
{
"studentId": "781e5dc2-f76b-4e35-ac27-f5835c960083",
"studentName": "Mr. 1",
"studentMarks": 1
},
{
"studentId": "cb8a606a-b91c-4697-8d73-84170b156180",
"studentName": "Mr. 2",
"studentMarks": 4
},
**{
"studentId": "656b247f-a755-476f-a845-b61d28e4be79",
"studentName": "Mr. 3",
"studentMarks": 60
}**,
{
"studentId": "d1cd5ee3-cef6-4d5e-a380-cb5e79495f77",
"studentName": "Mr. 4",
"studentMarks": 16
}
]
请检查此DW。未使用 update 运算符。只有条件逻辑。如果您有任何动态类型的要求并且没有硬编码,请告诉我,我会尝试更新我的答案。
%dw 2.0
output application/json
---
payload map (($ - 'studentMarks') ++
{'studentMarks':
if ($."studentId" == "656b247f-a755-476f-a845-b61d28e4be79")
60
else
$.'studentMarks'
})
输出
[
{
"studentId": "781e5dc2-f76b-4e35-ac27-f5835c960083",
"studentName": "Mr. 1",
"studentMarks": 1
},
{
"studentId": "cb8a606a-b91c-4697-8d73-84170b156180",
"studentName": "Mr. 2",
"studentMarks": 4
},
{
"studentId": "656b247f-a755-476f-a845-b61d28e4be79",
"studentName": "Mr. 3",
"studentMarks": 60
},
{
"studentId": "d1cd5ee3-cef6-4d5e-a380-cb5e79495f77",
"studentName": "Mr. 4",
"studentMarks": 16
}
]
虽然更新运算符是在 Mule 4.3 中添加的,但自 Mule 4.2 以来,Values 包中有一个 update() function。
我建议避免修复 id,因此我会将更改封装在一个函数中以对其进行参数化:
%dw 2.0
output application/json
import * from dw::util::Values
fun updateStudentMarks(list, id) =
list map
if ($.studentId == id) $ update "studentMarks" with 60
else $
---
updateStudentMarks(payload, "656b247f-a755-476f-a845-b61d28e4be79")
%dw 2.0
output application/json
---
(payload filter ($.studentId !='656b247f-a755-476f-a845-b61d28e4be79')) ++ (payload filter ($.studentId=='656b247f-a755-476f-a845-b61d28e4be79') map {
"studentId": $.studentId,
"studentName": $.studentName,
"studentMarks": 60
})
场景:我有一个学生列表。我想过滤具有特定 studentId 的学生并更新其标记以在列表中显示 60。如果不使用 Mule 4.3
中引入的“更新”运算符,我该如何做到这一点学生名单:
[
{
"studentId": "781e5dc2-f76b-4e35-ac27-f5835c960083",
"studentName": "Mr. 1",
"studentMarks": 1
},
{
"studentId": "cb8a606a-b91c-4697-8d73-84170b156180",
"studentName": "Mr. 2",
"studentMarks": 4
},
{
"studentId": "656b247f-a755-476f-a845-b61d28e4be79",
"studentName": "Mr. 3",
"studentMarks": 9
},
{
"studentId": "d1cd5ee3-cef6-4d5e-a380-cb5e79495f77",
"studentName": "Mr. 4",
"studentMarks": 16
}
]
要更新为60分的学生studentId为:656b247f-a755-476f-a845-b61d28e4be79
所以更新后的最终结果应该是:
[
{
"studentId": "781e5dc2-f76b-4e35-ac27-f5835c960083",
"studentName": "Mr. 1",
"studentMarks": 1
},
{
"studentId": "cb8a606a-b91c-4697-8d73-84170b156180",
"studentName": "Mr. 2",
"studentMarks": 4
},
**{
"studentId": "656b247f-a755-476f-a845-b61d28e4be79",
"studentName": "Mr. 3",
"studentMarks": 60
}**,
{
"studentId": "d1cd5ee3-cef6-4d5e-a380-cb5e79495f77",
"studentName": "Mr. 4",
"studentMarks": 16
}
]
请检查此DW。未使用 update 运算符。只有条件逻辑。如果您有任何动态类型的要求并且没有硬编码,请告诉我,我会尝试更新我的答案。
%dw 2.0
output application/json
---
payload map (($ - 'studentMarks') ++
{'studentMarks':
if ($."studentId" == "656b247f-a755-476f-a845-b61d28e4be79")
60
else
$.'studentMarks'
})
输出
[
{
"studentId": "781e5dc2-f76b-4e35-ac27-f5835c960083",
"studentName": "Mr. 1",
"studentMarks": 1
},
{
"studentId": "cb8a606a-b91c-4697-8d73-84170b156180",
"studentName": "Mr. 2",
"studentMarks": 4
},
{
"studentId": "656b247f-a755-476f-a845-b61d28e4be79",
"studentName": "Mr. 3",
"studentMarks": 60
},
{
"studentId": "d1cd5ee3-cef6-4d5e-a380-cb5e79495f77",
"studentName": "Mr. 4",
"studentMarks": 16
}
]
虽然更新运算符是在 Mule 4.3 中添加的,但自 Mule 4.2 以来,Values 包中有一个 update() function。
我建议避免修复 id,因此我会将更改封装在一个函数中以对其进行参数化:
%dw 2.0
output application/json
import * from dw::util::Values
fun updateStudentMarks(list, id) =
list map
if ($.studentId == id) $ update "studentMarks" with 60
else $
---
updateStudentMarks(payload, "656b247f-a755-476f-a845-b61d28e4be79")
%dw 2.0
output application/json
---
(payload filter ($.studentId !='656b247f-a755-476f-a845-b61d28e4be79')) ++ (payload filter ($.studentId=='656b247f-a755-476f-a845-b61d28e4be79') map {
"studentId": $.studentId,
"studentName": $.studentName,
"studentMarks": 60
})