

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# JSON.ARRINDEX
<a name="json-arrindex"></a>

搜索标量 JSON 值在路径的数组中的首次出现。
+ 超出范围错误的处理方法是将索引舍入到数组的开头和结尾。
+ 如果 start > end，则返回 -1（未找到）。

语法

```
JSON.ARRINDEX <key> <path> <json-scalar> [start [end]]
```
+ key（必需）– JSON 文档类型的键
+ path（必需）– 一个 JSON 路径
+ json-scalar（必需）– 要搜索的标量值；JSON 标量是指不是对象或数组的值。即字符串、数字、布尔值和 null 都是标量值。
+ start（可选）– 起始索引（含）。如果未提供，则默认为 0。
+ end（可选）– 结束索引（不含）。如果未提供，则默认为 0，这意味着包含最后一个元素。0 或 -1 意味着包含最后一个元素。

**Return**

如果路径是增强的语法：
+ 整数数组。每个值都是路径内数组中匹配元素的索引。如果未找到，则值为 -1。
+ 如果值不是数组，则其对应的返回值为 Null。

如果路径是受限的语法：
+ 整数、匹配元素的索引，如果未找到，则为 -1。
+ 如果路径中的值不是数组，则为 `WRONGTYPE` 错误。

**示例**

 增强的路径语法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"], ["a", "b", "c"]]'
OK
127.0.0.1:6379> JSON.ARRINDEX k1 $[*] '"b"'
1) (integer) -1
2) (integer) -1
3) (integer) 1
4) (integer) 1
```

 受限的路径语法：

```
127.0.0.1:6379> JSON.SET k1 . '{"children": ["John", "Jack", "Tom", "Bob", "Mike"]}'
OK
127.0.0.1:6379> JSON.ARRINDEX k1 .children '"Tom"'
(integer) 2
```