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

JSON_ARRAY_INSERT() – Insertar valores en una matriz JSON en MySQL

En MySQL, JSON_ARRAY_INSERT() La función se usa para insertar un nuevo valor en una matriz.

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_ARRAY_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';

Resultado:

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

Entonces, el tercer argumento se inserta en la matriz en la ruta especificada. En este caso, uso $[1] para la ruta, que se refiere al segundo elemento (las matrices JSON usan numeración basada en cero; la numeración comienza en 0 ).

Ejemplo 2:matriz anidada

Este es un ejemplo de cómo insertar un valor en una matriz que está anidada dentro de otra matriz.

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

Resultado:

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

Así que aquí uso $[2][1] como el camino. El [2] se refiere al tercer elemento de la matriz externa. El [1] se refiere al segundo elemento de la matriz anidada.

Ejemplo 3:un documento JSON más grande

Este ejemplo utiliza un documento JSON (ligeramente) más grande. Esto demuestra cómo cambia la ruta dependiendo de dónde se encuentre la matriz dentro del documento.

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_INSERT(@data, '$.Person.Hobbies[1]', "Base Jumping") AS 'Result';

Resultado:

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