首页 > 解决方案 > 在 Dataweave 中过滤值

问题描述

我正在尝试使用 dataweave 过滤掉与变量匹配的值。

result = {
    "drives": [{
        "id": "0AEBByqXZ0xb4Uk9PVA",
        "name": "QA-zz-SFJobs-Contacts"
    }, {
        "id": "0AC_FdkeL63mHUk9PVA",
        "name": "QA"
    }]
}

以上是我的有效载荷。

我正在尝试下面的代码

%dw 2.0
output application/json
---
{ 
    drives: payload.result.drives[0] filter ((item, index) -> item.name == "QA") 
}

这给了我错误

错误:

您使用以下参数调用了函数“值选择器”: 1:String ("{"drives":[{"id":"0AEBByqXZ0xb4Uk9PVA","name":"QA-zz-SFJobs-Contact...) 2:名称(“驱动器”)

但它需要以下组合之一: (Array, Name) (Array, String) (Date, Name) (DateTime, Name) (LocalDateTime, Name) (LocalTime, Name) (Object, Name) (Object, String) (Period , 姓名) (时间, 姓名)

5| 驱动器:payload.result.drives[0] filter ((item, index) -> item.name == vars.folderName) ^^^^^^^^^^^^^^^^^^^^ Trace :在过滤器(行:5,列:13)在主(行:5,列:38)”评估表达式:“%dw 2.0输出应用程序/ json

{驱动器:payload.result.drives [0]过滤器((项目,索引)-> item.name == vars.folderName)}“。

预期输出:

{“id”:“0AC_FdkeL63mHUk9PVA”,“名称”:“QA”}

我怎样才能做到这一点?

标签: filteringmatchingdataweavemule4

解决方案


输入应该是有效的“JSON”,例如:

{
    "result": {
        "drives": [{
            "id": "0AEBByqXZ0xb4Uk9PVA",
            "name": "QA-zz-SFJobs-Contacts"
        },
        {
            "id": "0AC_FdkeL63mHUk9PVA",
            "name": "QA"
        }]
    }
}

这里应用上面的逻辑:

{ 
    drives: payload.result.drives[0]
}

返回输出为:

{
  "drives": {
    "id": "0AEBByqXZ0xb4Uk9PVA",
    "name": "QA-zz-SFJobs-Contacts"
  }
}

这是包含对象的单个对象,因此不能应用过滤器方法,因为过滤器适用于数组和对象数组。

要尝试您的数据编织代码片段,您可以使用在线数据编织编辑器: 在线数据编织编辑器 ,它可以为您提供更好的见解。


推荐阅读