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

JSON_INSERT() – Insertar valores en un documento JSON en MySQL

En MySQL, JSON_INSERT() La función inserta un valor 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.

Sintaxis

La sintaxis es así:

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

donde:

  • json_doc es el documento JSON.
  • path es la ruta del elemento para el cual insertar el nuevo valor.
  • val es el nuevo valor que se insertará.

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.

Ejemplo 1:uso básico

Aquí hay un ejemplo para demostrarlo.

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

Resultado:

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

Entonces, el tercer argumento se inserta en la matriz en la ruta especificada. En este caso, 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_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';

Resultado:

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

Ejemplo 2:intentar sobrescribir una ruta existente

Un par ruta-valor para una ruta existente en el documento se ignora y no sobrescribe el valor del documento existente.

Entonces, si modificamos el ejemplo anterior para insertar un valor en Name (que ya existe), no se realiza ninguna inserción:

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

Resultado:

+-------------------------------------+
| Result                              |
+-------------------------------------+
| {"Name": "Homer", "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_INSERT('[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, la matriz permanecerá sin cambios:

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

Resultado:

+-----------+
| Result    |
+-----------+
| [1, 2, 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_INSERT('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';

Resultado:

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

Pero una vez más, si intenta insertar un valor en una ruta que ya existe, el documento JSON permanece sin cambios:

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

Resultado:

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

Ejemplo 4: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_INSERT(@data, '$.Person.Hobbies[2]', "Base Jumping") AS 'Result';

Resultado:

+----------------------------------------------------------------------------------+
| Result                                                                           |
+----------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} |
+----------------------------------------------------------------------------------+

Consulte también JSON_ARRAY_INSERT() y JSON_ARRAY_APPEND() si necesita insertar o agregar datos en una matriz JSON.