问题描述
我正在尝试使用dataweave从输入有效负载中匹配特定值。
输入:
{
"drives": [{
"id": "0AEzOyzyCb7Uk9PVA","name": "SFJob-2020-10"
},{
"id": "0AMEHi1wsq-8FUk9PVA","name": "SFJobs-2020-11"
} ],"nextPagetoken": "~!!~AI9FV7RV4uSXy20zpCBTP2LFWCXS0c"
},{
"drives": [{
"id": "0AEz3mOyzyCb7Uk9PVA","name": "Dev2020-10"
},"name": "Dev2020-11"
}],"nextPagetoken": "~!!~AI9P2LFWCXS0c"
}
如何检查是否存在“ Dev2020-10”值。
%dw 2.0
output application/json
---
payload.drives filter ((item,index) -> item.name == 'Dev2020-10')
预期输出:
[ {
"id": "0AEz3mOyzyCb7Uk9PVA","name": "Dev2020-10"
} ]
我该如何实现?
解决方法
首先,输入无效。我假设它应该是JSON数组,所以将其放在方括号中:[ {..},{..} ]
。
此后,您将注意到过滤器需要一个对象,但是由于它是一个数组,因此需要首先对其进行映射。为了返回单个数组,我使用了flatMap():
%dw 2.0
output application/json
---
payload flatMap $.drives filter ((item,index) -> item.name == 'Dev2020-10')
输出:
[
{
"id": "0AEz3mOyzyCb7Uk9PVA","name": "Dev2020-10"
}
]
,
解决方案可以考虑两个步骤:
- 将所有驱动器合并在一起以获取对象
flatten(inputArray.drives)
的单个阵列 - 根据搜索条件
filter ((item,index) -> item.name == "Dev2020-11")
过滤新的对象数组
解决方案将是这样:
%dw 2.0
output application/json
var inputArray = [
{
"drives": [{
"id": "0AEzOyzyCb7Uk9PVA","name": "SFJob-2020-10"
},{
"id": "0AMEHi1wsq-8FUk9PVA","name": "SFJobs-2020-11"
} ],"nextPageToken": "~!!~AI9FV7RV4uSXy20zpCBTP2LFWCXS0c"
},{
"drives": [{
"id": "0AEz3mOyzyCb7Uk9PVA","name": "Dev2020-10"
},"name": "Dev2020-11"
}],"nextPageToken": "~!!~AI9P2LFWCXS0c"
}
]
---
flatten(inputArray.drives) filter ((item,index) -> item.name == "Dev2020-11")
要了解有关展平方法的更多信息,请参阅文档:mule 4 doc