Mule 3中基于条件从数组移除对象的DataWeave 1.0正确实现方案
在Mule 3 DataWeave 1.0中过滤指定对象的正确实现
嘿,看了你写的DataWeave代码,问题出在过滤条件的逻辑上,还有个字段名的小失误。你要移除的是profile为Aftersales_Manager且raflag为false的对象,那咱们的过滤条件应该是保留不满足这个组合条件的所有元素,而不是你原来写的逻辑。另外你代码里用了$.mule_temp_profile,但输入数据里的字段是profile,这也会导致匹配不上。
下面是修正后的正确代码,而且根据你的期望输出简化了字段映射:
%dw 1.0 %output application/json --- payload filter !( $.profile == 'Aftersales_Manager' and $.raflag == false ) map { "ldap": $.ldap, "raflag": $.raflag, "profile": $.profile }
代码说明:
!( $.profile == 'Aftersales_Manager' and $.raflag == false ):这个条件的意思是“不是(profile是Aftersales_Manager且raflag为false)”,正好精准排除你要移除的目标对象- 映射部分只保留了你期望输出里的三个字段,避免多余字段的干扰
测试用输入数据:
[{ "ldap": "V00075", "raflag": true, "profile": "Aftersales_Manager" }, { "ldap": "V00076", "raflag": true, "profile": "Aftersales_Manager" }, { "ldap": "V00077", "raflag": false, "profile": "Aftersales_Manager" }, { "ldap": "V00078", "raflag": true, "profile": "Worker" }, { "ldap": "V00079", "raflag": true, "profile": "Manager" }]
运行后得到的期望输出:
[{ "ldap": "V00075", "raflag": true, "profile": "Aftersales_Manager" }, { "ldap": "V00076", "raflag": true, "profile": "Aftersales_Manager" }, { "ldap": "V00078", "raflag": true, "profile": "Worker" }, { "ldap": "V00079", "raflag": true, "profile": "Manager" }]
内容的提问来源于stack exchange,提问作者Devendra
相关产品推荐
相关产品推荐

