

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

# JSON.MSET
<a name="json-mset"></a>

支持 Valkey 8.1 及更高版本。

为多个密钥设置 JSON 值。该操作属于原子操作，要么设置所有值，要么一个值都不设置。

**语法**

```
JSON.MSET key path json [ key path json ... ]
```
+ 如果路径调用对象成员：
  + 如果父元素不存在，该命令将返回 NONEXISTENT 错误。
  + 如果父元素存在但不是对象，该命令将返回 ERROR。
  + 如果父元素存在并且是对象：
    + 如果成员不存在，当且仅当父对象是路径中的最后一个子对象时，才会将新成员附加到父对象。否则，该命令将返回 NONEXISTENT 错误。
    + 如果成员存在，则其值将替换为 JSON 值。
+ 如果路径调用数组索引：
  + 如果父元素不存在，该命令将返回 NONEXISTENT 错误。
  + 如果父元素存在但不是数组，该命令将返回 ERROR。
  + 如果父元素存在但索引超出界限，该命令返回 OUTOFBOUNDARIES 错误。
  + 如果父元素存在且索引有效，该元素将被新的 JSON 值替换。
+ 如果路径调用对象或数组，该值（对象或数组）将被新的 JSON 值替换。

**Return**
+ 简单字符串回复：操作成功时返回“OK”。
+ 简单错误回复：操作失败时返回。

**示例**

增强的路径语法：

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

受限的路径语法：

```
127.0.0.1:6379> JSON.MSET k1 . '{"name": "John","address": {"street": "123 Main St","city": "Springfield"},"phones": ["555-1234","555-5678"]}'
OK
127.0.0.1:6379> JSON.MSET k1 .address.street '"21 2nd Street"' k1 .address.city '"New York"'
OK
127.0.0.1:6379> JSON.GET k1 .address.street
"\"21 2nd Street\""
127.0.0.1:6379> JSON.GET k1 .address.city
"\"New York\""
```