En MySQL, hay una serie de funciones que le ayudarán a trabajar con documentos JSON. Estos incluyen el JSON_SET()
, JSON_INSERT()
y JSON_REPLACE()
funciones.
Estas tres funciones están relacionadas, pero difieren ligeramente.
Sintaxis
Primero, aquí está la sintaxis para las tres funciones:
JSON_SET(json_doc, path, val[, path, val] ...) JSON_INSERT(json_doc, path, val[, path, val] ...) JSON_REPLACE(json_doc, path, val[, path, val] ...)
Así que las tres funciones aceptan los mismos argumentos. Esto es para lo que son estos argumentos:
json_doc
es el documento JSON.path
es la ruta del elemento para el cual insertar datos o actualizar el valor.val
es el nuevo valor.
La diferencia
Aquí está la diferencia entre estas funciones:
JSON_SET()
reemplaza valores existentes y agrega valores inexistentes.JSON_INSERT()
inserta valores sin reemplazar los valores existentes.JSON_REPLACE()
reemplaza solo los valores existentes.
Entonces, básicamente, cuál use depende de si está actualizando un valor existente o insertando uno nuevo (aunque JSON_SET()
hace ambas cosas).
Ejemplo 1:Insertar un valor
Aquí hay ejemplos para demostrar la diferencia entre estas tres funciones.
JSON_SET()
Esto es lo que sucede si intentamos insertar un nuevo valor usando JSON_SET()
:
SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Resultado:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
Así que funcionó perfectamente.
JSON_INSERT()
Esto es lo que sucede si intentamos insertar un nuevo valor usando JSON_INSERT()
:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Resultado:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
Exactamente el mismo resultado que con JSON_SET()
.
JSON_REPLACE()
Esto es lo que sucede si intentamos insertar un nuevo valor usando JSON_REPLACE()
:
SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Resultado:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
En este caso, el nuevo valor no se insertó. El documento JSON original se devuelve sin cambios. Esto se debe a que esta función solo reemplaza los valores existentes, no inserta nuevos.
Ejemplo 2:actualizar un valor existente
Ahora para actualizar los valores existentes.
JSON_SET()
Esto es lo que sucede si intentamos actualizar un valor existente usando JSON_SET()
:
SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Resultado:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
Así que de nuevo, funcionó perfectamente. Actualizamos con éxito el segundo par clave/valor con el nuevo valor.
JSON_INSERT()
Esto es lo que sucede si intentamos actualizar un valor existente usando JSON_INSERT()
:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Resultado:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
En este caso, el valor existente no se actualizó. El documento JSON se devuelve sin cambios. Esto se debe a que JSON_INSERT()
La función solo inserta valores nuevos, no actualiza los existentes.
JSON_REPLACE()
Esto es lo que sucede si intentamos actualizar un valor existente usando JSON_REPLACE()
:
SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Resultado:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
Se actualiza perfectamente.