sql >> Base de Datos >  >> RDS >> Mysql

JSON_REPLACE() – Reemplazar valores en un documento JSON en MySQL

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