Mule Dataweave:与默认函数组合使用的过滤器不工作

Mule Dataweave:与默认函数组合使用的过滤器不工作,mule,mule-component,dataweave,mule-el,Mule,Mule Component,Dataweave,Mule El,我使用Mule dataweave,这是我的请求,我想将我的请求过滤为code==p,如果包含code=p的请求不存在,那么总是默认为code==C,因为传入请求中始终存在code=C 请求: { "addresses": [ { "contact": 0, "code": "P", "TypeDescription": "POSTAL", "postcode": "1007", "State": "

我使用Mule dataweave,这是我的请求,我想将我的请求过滤为code==p,如果包含code=p的请求不存在,那么总是默认为code==C,因为传入请求中始终存在code=C

请求:

{
   "addresses": [
     {
        "contact": 0,
        "code": "P",
        "TypeDescription": "POSTAL",
        "postcode": "1007",
        "State": "TamilNadu",
        "Description": "Test",         
    },
    {
        "contact": 1,
        "code": "C",
        "TypeDescription": "PHYSICAL",
        "postcode": "Bangalore",
        "State": "",
        "Description": "NEW",

    }
 ] 
}
Dataweave:

 %dw 1.0
 %output application/json
 ---
 payload.addresses filter $.code == "P"  
它可以很好地过滤掉包含p的列表,但是当尝试将filter与default结合使用时,它不会这样做

我在dataweave payload.addresses filter$中尝试了如下操作。代码==P1从现在起这里的默认值

因为在上面的响应中,我正在过滤请求中不存在的P1,因此我希望响应中包含默认内容。但它不起作用

注意:使用when和other,将列表显示两次。我只需要一个列表作为响应,要么是包含代码P的列表,要么是包含代码C的列表


使用MUle 3.8.5 V。请告诉我您的想法。提前感谢。

据我所知,Dataweave从右到左工作,因此在本例中,评估如下:

“P1默认从现在起这里的任何内容”解析为P1 在“payload.addresses”上运行“filter$.code==P1” 当然,第一个选项将始终计算为P1,因此默认值基本上被忽略。您需要在表达式的其余部分使用括号,然后使用默认值跟随它。现在它将计算括号,然后计算默认表达式

例如:payload.addresses filter$.code==P1从现在起这里的默认值


不过,这不是一个好例子,因为如果所有选项都不匹配,筛选器将返回一个空列表,而不是null,因此默认值不起作用。您可以尝试这样的回答:

在局部变量中创建一个默认值,并在筛选时使用OR条件。 下面的例子

{
  biggerThanTwo: [0, 1, 2, 3, 4, 5] filter (($ > 2) OR ($ ==1))
}

这是我的解决办法。正如@Clinton提到的过滤器返回空数组NOTNULL,下面是它的工作方式

%dw 1.0 %输出应用程序/java

%var conditionalRoute=payload.addresses筛选器$.addressTypeCode==P
条件路由时的条件路由!=[]否则,此时此处的任何内容

向上投票,它为解决方案提供了一个提示-筛选器返回空数组NOTNULL。我像上面一样想出了解决办法。谢谢,你只能检查一个条件