You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JSONata中数组索引用表达式与字面量结果不同?

正常可用的写法

假设我们有如下数据:

[[1,2], [3,4]]

要提取数字3,可以使用双层筛选。文档说明:

如果谓词表达式是整数,或求值为整数的表达式,则输入序列中对应位置(从零开始)的项将是结果序列中唯一被选中的项。

或者:

当需要有序值集合时会使用JSON数组。数组中的每个值都与索引(位置)关联而非名称,因此要寻址数组中的单个值,需要额外语法指定索引。这通过数组字段名后的方括号实现。如果方括号内包含数字,或求值为数字的表达式,则该数字代表要选择的值的索引。索引从零开始,即数组arr的第一个值为arr[0]。如果数字不是整数,则向下取整为整数。如果方括号内的表达式是非数值的,或求值结果非数字,则将其视为谓词。

这两段描述看似矛盾——第一段提到“[它]是结果序列中唯一被选中的项”,第二段则说“要选择的值”。不过两段都明确:字面整数与求值为整数的表达式效果相同。

因此,以下写法:

$[1][0]

会得到预期结果:3。

问题

文档指出谓词也可以是求值为整数的表达式。我认为1+0就是这样的表达式,于是尝试:

$[1+0][0]

结果却变成了:

[3,4]

我可以通过$[1+0][0][0]“修复”这个问题。这是怎么回事?

已尝试的操作

会不会是1+0并非求值为整数的表达式?如果是这样,按照文档说明它会被当作谓词处理,此时可能返回一个序列(恰好只有一个值)。但这种情况下,什么样的表达式才是求值为整数的表达式?

使用变量时也会得到相同结果:

(
    $index := 1
    $[$index][0]
)

内容的提问来源于stack exchange,提问作者yankee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:01:30