首页 > 解决方案 > 如何访问 DMN 中 FEEL 列表文字表达式中的列表元素?

问题描述

我有以下对象列表:

"animals":[
{
  "family":"cat",
  "color":"grey"
},
{
  "family":"dog",
   "color":"white"
}
]

我想animal访问dog family and white color. 我试图通过这样做来实现它:

animals[family = "dog" and color = "white"][0]

但它显示警告如下:

FEEL WARN while evaluating literal expression 'animals[ family = .... [string clipped after 50 chars, total length is 82]': Index out of bound: list of 1 elements, index 0; will evaluate as FEEL null

这里到底有什么不正确的?我觉得我在语义上做错了什么。我还参考了 FEEL 的规范,但无法弄清楚出了什么问题。我还参考了Redhat的 DMN 决策建模文档,但我仍然一无所知。请帮忙。

标签: droolskiedmnfeel-language

解决方案


在 FEEL 中,列表的元素索引从 1 开始。

因此,您要访问第一个动物对象的表达式实际上是:

animals[family = "dog" and color = "white"][1]

这记录在第 126 页的DMN 规范中:

列表的第一个元素L可以使用 访问L[1],最后一个元素可以使用 访问L[-1]

DMN 规范列表索引从 1 开始

为了提供更友好的参考,这记录在Drools 文档中

列表中的元素可以通过索引访问,其中第一个元素是 1。负索引可以访问从列表末尾开始的元素,因此 -1 是最后一个元素。

Drools 文档 DMN FEEL 列表索引从 1 开始

...同样适用于产品化的Red Hat 文档版本:

红帽文档 DMN FEEL 列表索引从 1 开始


推荐阅读