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

JSON_SET() – Insertar o actualizar valores en un documento JSON en MySQL

En MySQL, JSON_SET() La función inserta o actualiza valores en un documento JSON y devuelve el resultado.

Proporcione el documento JSON como primer argumento, seguido de la ruta para insertar, seguido del valor para insertar. Puede proporcionar varios pares de ruta/valor si necesita actualizar varios valores.

Sintaxis

La sintaxis es así:

JSON_SET(json_doc, path, val[, path, val] ...)

donde:

  • 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.

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.

Se produce un error si el primer argumento no es un documento JSON válido, o si algún argumento de ruta no es una expresión de ruta válida o contiene un * o ** comodín.

Ejemplo 1:Insertar un valor

Aquí hay un ejemplo para demostrar cómo insertar un valor usando esta función.

SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';

Resultado:

+--------------------------+
| Result                   |
+--------------------------+
| {"a": 1, "b": 2, "c": 3} |
+--------------------------+

En este caso, el tercer argumento se inserta en la matriz en la ruta especificada. Yo uso $.c para la ruta y 3 para que se inserte el valor. Esto da como resultado un par clave/valor de "c": 3 .

Aquí hay otro ejemplo:

SELECT 
  JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';

Resultado:

+------------------------------------------------+
| Result                                         |
+------------------------------------------------+
| {"Age": 39, "Name": "Homer", "Gender": "Male"} |
+------------------------------------------------+

Ejemplo 2:actualizar un valor

El ejemplo anterior insertó un valor. Este ejemplo actualiza un valor existente.

SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';

Resultado:

+------------------+
| Result           |
+------------------+
| {"a": 1, "b": 3} |
+------------------+

Aquí hay otro ejemplo:

SELECT 
  JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';

Resultado:

+------------------------------------+
| Result                             |
+------------------------------------+
| {"Name": "Bart", "Gender": "Male"} |
+------------------------------------+

Ejemplo 3:matrices

Puede insertar valores en una matriz utilizando una ruta más allá del final de la matriz existente. Ejemplo:

SELECT JSON_SET('[1, 2, 3]', '$[3]', 4) AS 'Result';

Resultado:

+--------------+
| Result       |
+--------------+
| [1, 2, 3, 4] |
+--------------+

Sin embargo, si usa una ruta que ya existe en la matriz, el valor se actualizará:

SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) AS 'Result';

Resultado:

+-----------+
| Result    |
+-----------+
| [1, 4, 3] |
+-----------+

Si el valor existente no es una matriz, se ajusta automáticamente como una matriz y luego se amplía con el nuevo valor. Ejemplo:

SELECT JSON_SET('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';

Resultado:

+-----------------------+
| Result                |
+-----------------------+
| [{"a": 1, "b": 2}, 3] |
+-----------------------+

Ejemplo 4:valores múltiples

Puede insertar/actualizar varios valores a la vez. Simplemente agregue cada par clave/valor separados por una coma. Ejemplo:

SELECT JSON_SET('{"a": 1, "b": 2, "c": 3}', '$.a', 9, '$.c', 'Bart') AS 'Result';

Resultado:

+-------------------------------+
| Result                        |
+-------------------------------+
| {"a": 9, "b": 2, "c": "Bart"} |
+-------------------------------+

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", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_SET(@data, '$.Person.Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Result';

Resultado:

+-----------------------------------------------------------------+
| Result                                                          |
+-----------------------------------------------------------------+
| {"Person": {"Name": "Bart", "Hobbies": ["Eating", "Mischief"]}} |
+-----------------------------------------------------------------+

Consulte también JSON_INSERT() para insertar valores sin reemplazar valores existentes, y JSON_REPLACE() para reemplazar solo los valores existentes.