我正在使用Mule dataweave,这是我的请求,我想filter
我的请求code
==“P”如果请求包含Code = p不存在则始终默认为code ==“ C“因为代码= 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 $.code == "P1" default "anything here as of now"
中尝试过以下内容。
由于在上面的响应中我正在过滤请求中不存在的P1,因此我期待响应中的default
内容。但它没有用。
注意:使用when和其他方式,使列表两次。我只需要一个列表作为响应,包含Code P包含列表或C包含列表。
使用MUle 3.8.5 V.请让我知道你的想法。提前谢谢。
答案 0 :(得分:1)
根据我的理解,Dataweave从右到左工作,所以在这种情况下评估是这样的:
当然,第一个选项将始终评估为“P1”,因此默认基本上被忽略。您需要在表达式的其余部分周围使用括号,然后使用默认值进行操作。现在它将评估括号,然后是默认表达式。
例如:(payload.addresses过滤$ .code ==“P1”)默认“此处的任何内容”
这不是一个很好的例子,因为如果没有选项匹配,过滤器将返回一个空列表,而不是null,因此默认值不起作用。您可以尝试这样的答案:https://stackoverflow.com/a/44431546/2614624
答案 1 :(得分:0)
在局部变量中创建默认值,并在过滤时使用OR条件。 示例如下。
{
biggerThanTwo: [0, 1, 2, 3, 4, 5] filter (($ > 2) OR ($ ==1))
}
答案 2 :(得分:0)
这是我的解决方案。正如@Clinton所提到的,Filter返回Empty数组不为null,这是它的解决方法
%dw 1.0 %输出应用程序/ java
conditionalRoute when ConditionRoute!= []否则"此处的任何内容截至目前为止"