SQLite proporciona varias funciones para insertar, configurar y reemplazar valores en un documento JSON. Específicamente, proporciona json_insert() , json_set() y json_replace() .
Estas funciones realizan tareas similares y, a veces, puede usarlas indistintamente hasta cierto punto.
Pero definitivamente hay una clara diferencia entre cada función.
La diferencia
La siguiente tabla describe la diferencia entre estas funciones:
| Función | ¿Sobrescribir si ya existe? | ¿Crear si no existe? |
|---|---|---|
json_insert() | No | Sí |
json_replace() | Sí | No |
json_set() | Sí | Sí |
Entonces, la diferencia entre estas funciones está en cómo tratan las claves/valores existentes e inexistentes.
Ejemplos
Aquí hay algunos ejemplos simples para demostrar cómo cada función trata con claves/valores existentes y no existentes.
Cuando la clave ya existe
Así es como cada función se ocupa de actualizar una clave que ya existe:
SELECT
json_insert('{ "a" : 1 }', '$.a', 2) AS json_insert,
json_replace('{ "a" : 1 }', '$.a', 2) AS json_replace,
json_set('{ "a" : 1 }', '$.a', 2) AS json_set; Resultado:
+-------------+--------------+----------+
| json_insert | json_replace | json_set |
+-------------+--------------+----------+
| {"a":1} | {"a":2} | {"a":2} |
+-------------+--------------+----------+
Podemos ver que json_insert() no actualizó nada, pero las otras dos funciones sí.
Es algo similar con las matrices:
SELECT
json_insert('[ 1, 2, 3 ]', '$[1]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[1]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[1]', 4) AS json_set; Resultado:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | [1,2,3] | [1,4,3] | [1,4,3] | +-------------+--------------+----------+
Cuando la clave no existe
Esto es lo que sucede cuando la clave no existe:
SELECT
json_insert('{ "a" : 1 }', '$.b', 2) AS json_insert,
json_replace('{ "a" : 1 }', '$.b', 2) AS json_replace,
json_set('{ "a" : 1 }', '$.b', 2) AS json_set; Resultado:
+---------------+--------------+---------------+
| json_insert | json_replace | json_set |
+---------------+--------------+---------------+
| {"a":1,"b":2} | {"a":1} | {"a":1,"b":2} |
+---------------+--------------+---------------+
Podemos ver que json_replace() no insertó el nuevo par clave/valor, pero las otras dos funciones sí lo hicieron.
Mismo trato con matrices:
SELECT
json_insert('[ 1, 2, 3 ]', '$[3]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[3]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[3]', 4) AS json_set; Resultado:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Esto también se puede hacer usando el [#] ruta:
SELECT
json_insert('[ 1, 2, 3 ]', '$[#]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[#]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[#]', 4) AS json_set; Resultado:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Un beneficio de usar [#] es que no necesita saber cuántos elementos ya hay en la matriz.