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

JSON_ARRAY_APPEND():agregar valores a una matriz JSON en MySQL

Al usar documentos JSON con MySQL, puede usar JSON_ARRAY_APPEND() función para agregar nuevos valores a una matriz.

La forma en que funciona es que proporciona el documento JSON como primer argumento, luego sigue con la ruta para agregar, seguido del valor para agregar.

En MySQL 5.7, esta función se llamaba JSON_APPEND() pero ese nombre ya no es compatible.

Sintaxis

La sintaxis es así:

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

donde:

  • json_doc es el documento JSON.
  • path es la ruta del elemento al que agregar el nuevo valor.
  • val es el nuevo valor que se agregará.

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

Resultado:

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

Entonces, el tercer argumento se agrega a la matriz. En este caso, uso $ por el camino Este es un sinónimo del documento JSON, por lo que el valor se agrega a la matriz de nivel superior (que en este caso, resulta ser la única matriz).

Ejemplo 2:matriz anidada

Este es un ejemplo de agregar un valor a una matriz que está anidada dentro de otra matriz.

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

Resultado:

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

Así que aquí uso $[2] como el camino. Esto especifica la matriz en el tercer elemento (las matrices usan numeración basada en cero, por lo que el conteo comienza en cero).

Si aún no había una matriz en ese elemento, se crea una nueva matriz.

Así:

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

Resultado:

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

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_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';

Resultado:

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

Y al igual que en el ejemplo anterior, también podemos crear una nueva matriz anidada, si es necesario:

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';

Resultado:

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