

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 （選用） – 如果路徑是根，則只有在金鑰存在時才設定值，即取代現有的文件。如果路徑不是根，則只有在路徑存在時才設定值，即更新現有值。

**傳回**
+ 成功時有簡單字串 '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
```