

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

# JSON.SET
<a name="json-set"></a>

在路径中设置 JSON 值。

如果路径调用对象成员：
+ 如果父元素不存在，该命令将返回 NONEXISTENT 错误。
+ 如果父元素存在但不是对象，该命令将返回 ERROR。
+ 如果父元素存在并且是对象：
  +  如果成员不存在，当且仅当父对象是路径中的最后一个子对象时，才会将新成员附加到父对象。否则，该命令将返回 NONEXISTENT 错误。
  +  如果成员存在，则其值将替换为 JSON 值。

如果路径调用数组索引：
+ 如果父元素不存在，该命令将返回 NONEXISTENT 错误。
+ 如果父元素存在但不是数组，该命令将返回 ERROR。
+ 如果父元素存在但索引超出界限，该命令返回 OUTOFBOUNDARIES 错误。
+ 如果父元素存在且索引有效，该元素将被新的 JSON 值替换。

如果路径调用对象或数组，该值（对象或数组）将被新的 JSON 值替换。

语法

```
JSON.SET <key> <path> <json> [NX | XX] 
```

[NX \$1 XX]，其中您可以有 0 或 1 个 [NX \$1 XX] 标识符
+ key（必需）– JSON 文档类型的键
+ path（必需）– JSON 路径。对于新的键，JSON 路径必须是根目录“.”。
+ NX（可选）– 如果路径是根目录，仅在键不存在时设置该值，即插入新文档。如果路径不是根目录，仅在路径不存在时设置该值，即在文档中插入一个值。
+ XX（可选）– 如果路径是根目录，仅在键存在时设置该值，即替换现有文档。如果路径不是根目录，则仅在路径存在时设置该值，即更新现有值。

**Return**
+ 成功时使用简单字符串“OK”。
+ 如果未满足 NX 或 XX 条件，则为 Null。

**示例**

 增强的路径语法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.SET k1 $.a.* '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"a\":{\"a\":0,\"b\":0,\"c\":0}}"

127.0.0.1:6379> JSON.SET k2 . '{"a": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.SET k2 $.a[*] '0'
OK
127.0.0.1:6379> JSON.GET k2
"{\"a\":[0,0,0,0,0]}"
```

 受限的路径语法：

```
127.0.0.1:6379> JSON.SET k1 . '{"c":{"a":1, "b":2}, "e": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.SET k1 .c.a '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"c\":{\"a\":0,\"b\":2},\"e\":[1,2,3,4,5]}"
127.0.0.1:6379> JSON.SET k1 .e[-1] '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"c\":{\"a\":0,\"b\":2},\"e\":[1,2,3,4,0]}"
127.0.0.1:6379> JSON.SET k1 .e[5] '0'
(error) OUTOFBOUNDARIES Array index is out of bounds
```