我需要查看一个列表,但仅从该列表中提取前两个元素。
我写了以下代码
payload.list.*listItem filter ($.type == "supervisor") map {
// other code
}
效果很好。然后我对其进行了修改,以仅提取前两个元素,例如:
payload.list.*listItem filter ($.type == "supervisor") [0 to 1] map {
// other code
}
并且它不再起作用了。我没有收到任何错误,但其他代码无法正常工作,就好像地图操作员无事可做。
如果应用过滤器后只有一个元素,我还需要使它适用于场景。我应该如何更改我的代码才能完成这项工作。
范围选择器必须直接在数组上使用,因此您只需要正确地进行选择即可:
(payload.list.*listItem filter ($.type == "supervisor"))[0 to 1] map {
// other code
}
您需要添加括号以确保优先级。另外,我很惊讶它对您完全有用。我需要将“类型”用单引号引起来,因为这是一个dataweave关键字。我执行此操作是?($$<2)
而不是[0 to 1]
,因为我不确定是否可以保证在过滤器的输出中至少包含两个对象。如果您知道,您将至少有两个,按原样保留它。
(payload.list.*listItem filter ($.'type' == "supervisor"))[?($$<2)] map (value, index) ->
{
"key":value
}
这里是有关优先级的Dataweave文档的link。它吸引了很多人。在大多数情况下,使用parens更安全。
为了最大的利益,将问题与样本输入和预期输出一起发布。