En MySQL, JSON_REPLACE()
La función reemplaza valores en un documento JSON y devuelve el resultado.
Proporciona el documento JSON como primer argumento, seguido de la ruta para reemplazar los datos, seguido del valor con el que reemplazar el valor existente.
Puede reemplazar datos en varios lugares del documento si es necesario. Para hacer esto, simplemente proporcione varios pares de ruta/valor según sea necesario.
Sintaxis
La sintaxis es así:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
Donde json_doc
es el documento JSON, path
es la ruta para reemplazar los datos y val
es el nuevo valor para reemplazar el valor existente.
Los pares ruta/valor se evalúan de izquierda a derecha. El documento producido al evaluar un par se convierte en el nuevo valor contra el cual se evalúa el siguiente par.
Si el par ruta/valor no existe en el documento JSON, se ignora y no tiene efecto.
El primer argumento debe ser un documento JSON válido; de lo contrario, se producirá un error.
Además, la path
el argumento debe ser una expresión de ruta válida y no puede contener un *
o **
comodín, de lo contrario se producirá un error.
Ejemplo 1:uso básico
Aquí hay un ejemplo para demostrarlo.
SELECT JSON_REPLACE('{"a": 1, "b": 2, "c": 3}', '$.b', 9) AS 'Result';
Resultado:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 9, "c": 3} | +--------------------------+
En este caso, reemplazamos b
valor de con 9
. Esto se debe a que especificamos $.b
como segundo argumento, y 9
como el tercero.
Aquí hay otro ejemplo:
SELECT JSON_REPLACE('{"Name": "Bart", "Age": 10}', '$.Name', 'Nelson - Ha Ha!') AS 'Result';
Resultado:
+----------------------------------------+ | Result | +----------------------------------------+ | {"Age": 10, "Name": "Nelson - Ha Ha!"} | +----------------------------------------+
Ejemplo 2:ruta inexistente
Si especifica una ruta que no existe, no se elimina nada. El documento JSON original se devuelve sin modificaciones.
SELECT JSON_REPLACE('{"Name": "Homer", "Age": 39}', '$.Gender', 'Male') AS 'Result';
Resultado:
+------------------------------+ | Result | +------------------------------+ | {"Age": 39, "Name": "Homer"} | +------------------------------+
Ejemplo 3:matrices
Aquí hay un ejemplo usando una matriz.
SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) AS 'Result';
Resultado:
+-----------+ | Result | +-----------+ | [9, 2, 3] | +-----------+
Las matrices usan numeración basada en cero, por lo que en este caso, se reemplaza el primer elemento.
Aquí hay otro ejemplo de matriz. Esta vez reemplazamos un valor en una matriz anidada.
SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) AS 'Result';
Resultado:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 9, 5]] | +-------------------+
Ejemplo 4:rutas múltiples
Puede especificar más de una ruta para reemplazar datos en varios lugares dentro del documento JSON.
Ejemplo básico:
SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) AS 'Result';
Resultado:
+------------------+ | Result | +------------------+ | [1, 9, 3, 22, 5] | +------------------+
Ejemplo 5:un documento JSON más grande
Aquí hay un ejemplo con un documento JSON (ligeramente) más grande.
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_REPLACE(@data, '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') AS 'Result';
Resultado:
+--------------------------------------------------------------------------------+ | Result | +--------------------------------------------------------------------------------+ | {"Person": {"Age": 10, "Name": "Bart", "Hobbies": ["Eating", "Base Jumping"]}} | +--------------------------------------------------------------------------------+