

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

Establece valores JSON en la ruta.

Si la ruta de acceso llama a un miembro de objeto:
+ Si el elemento principal no existe, el comando devolverá un error INEXISTENTE.
+ Si el elemento principal existe pero no es un objeto, el comando devolverá ERROR.
+ Si el elemento principal existe y es un objeto:
  +  Si el miembro no existe, se anexará un miembro nuevo al objeto principal si y solo si el objeto principal es el último objeto secundario de la ruta. De lo contrario, el comando devolverá un error INEXISTENTE.
  +  Si el miembro existe, su valor se reemplazará por el valor JSON.

Si la ruta requiere un índice de matriz:
+ Si el elemento principal no existe, el comando devolverá un error INEXISTENTE.
+ Si el elemento principal existe pero no es una matriz, el comando devolverá ERROR.
+ Si el elemento principal existe pero el índice está fuera de los límites, el comando devuelve un error OUTOFBOUNDARIES.
+ Si el elemento principal existe y el índice es válido, el elemento se reemplazará por el nuevo valor JSON.

Si la ruta llama a un objeto o matriz, el valor (objeto o matriz) se reemplazará por el nuevo valor JSON.

Sintaxis

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

[NX \$1 XX] Donde puede tener 0 o 1 de [NX \$1 XX] identificadores
+ clave (obligatorio): clave del tipo de documento JSON
+ ruta (obligatoria): una ruta JSON. Para una nueva clave, la ruta JSON debe ser la raíz “.”.
+ NX (opcional): si la ruta es la raíz, establezca el valor solo si la clave no existe; por ejemplo, insertar un nuevo documento. Si la ruta no es la raíz, establece el valor solo si la ruta no existe, es decir, inserta un valor en el documento.
+ XX (opcional): si la ruta es la raíz, establezca el valor solo si existe la clave; por ejemplo, reemplazar el documento existente. Si la ruta no es la raíz, establece el valor solo si la ruta existe, es decir, actualiza el valor existente.

**Devolución**
+ Cadena simple ‘OK’ en caso de éxito.
+ Es nulo si no se cumple la condición NX o XX.

**Ejemplos**

 Sintaxis de la ruta mejorada:

```
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]}"
```

 Sintaxis de la ruta restringida:

```
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
```