带地图的过滤器和范围不起作用

问题描述 投票:0回答:2

我需要查看一个列表,但仅从该列表中提取前两个元素。

我写了以下代码

payload.list.*listItem filter ($.type == "supervisor") map {

// other code

}

效果很好。然后我对其进行了修改,以仅提取前两个元素,例如:

payload.list.*listItem filter ($.type == "supervisor") [0 to 1] map {

// other code

}

并且它不再起作用了。我没有收到任何错误,但其他代码无法正常工作,就好像地图操作员无事可做。

如果应用过滤器后只有一个元素,我还需要使它适用于场景。我应该如何更改我的代码才能完成这项工作。

mule anypoint-studio dataweave mulesoft
2个回答
3
投票

范围选择器必须直接在数组上使用,因此您只需要正确地进行选择即可:

(payload.list.*listItem filter ($.type == "supervisor"))[0 to 1] map {

// other code

}

1
投票

您需要添加括号以确保优先级。另外,我很惊讶它对您完全有用。我需要将“类型”用单引号引起来,因为这是一个dataweave关键字。我执行此操作是?($$<2)而不是[0 to 1],因为我不确定是否可以保证在过滤器的输出中至少包含两个对象。如果您知道,您将至少有两个,按原样保留它。

(payload.list.*listItem filter ($.'type' == "supervisor"))[?($$<2)] map (value, index) -> 
    {
        "key":value
    }

这里是有关优先级的Dataweave文档的link。它吸引了很多人。在大多数情况下,使用parens更安全。


-1
投票

为了最大的利益,将问题与样本输入和预期输出一起发布。

© www.soinside.com 2019 - 2024. All rights reserved.