首页 > 解决方案 > 使用 dataweave 匹配 mule 4 中的数组值

问题描述

我正在尝试使用 dataweave 匹配来自输入有效负载的特定值。

输入:

{
    "drives": [{
        "id": "0AEzOyzyCb7Uk9PVA",
        "name": "SFJob-2020-10"
    }, {
        "id": "0AMEHi1wsq-8FUk9PVA",
        "name": "SFJobs-2020-11"
    } ],
    "nextPageToken": "~!!~AI9FV7RV4uSXy20zpCBTP2LFWCXS0c"
},
{
    "drives": [{
        "id": "0AEz3mOyzyCb7Uk9PVA",
        "name": "Dev2020-10"
    }, {
        "id": "0AMEHi1wsq-8FUk9PVA",
        "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"

}]

我怎样才能做到这一点?

标签: dataweavemule4

解决方案


解决方案可以考虑两个步骤:

  1. 将所有驱动器合并在一起以获得单个对象数组flatten(inputArray.drives)
  2. 根据搜索条件过滤新的对象数组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"
    }, {
        "id": "0AMEHi1wsq-8FUk9PVA",
        "name": "Dev2020-11"
    }],
"nextPageToken": "~!!~AI9P2LFWCXS0c"
    }
]
---
flatten(inputArray.drives) filter ((item, index) -> item.name == "Dev2020-11") 

要了解有关 flatten 方法的更多信息,请参阅文档:mule 4 doc


推荐阅读