sql >> Base de Datos >  >> RDS >> MariaDB

Explicación de MariaDB JSON_ARRAY_INSERT()

En MariaDB, JSON_ARRAY_INSERT() es una función integrada que inserta un valor en un documento JSON y devuelve el resultado.

Sintaxis

La sintaxis es así:

JSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)

Donde json_doc es el documento JSON, path es la ruta a la que desea insertar el/los valor/es, y value es el valor a insertar.

Ejemplo

Aquí hay un ejemplo para demostrarlo.

SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3);

Resultado:

+-------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3) |
+-------------------------------------------+
| [0, 3, 1, 2]                              |
+-------------------------------------------+

En este caso, el valor 3 se insertó en la matriz en la posición 1 . Las matrices están basadas en cero, por lo que se convierte en el segundo elemento de la matriz.

Insertar valores múltiples

Puede insertar múltiples valores dentro de una sola llamada a JSON_ARRAY_INSERT() .

Ejemplo:

SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5);

Resultado:

+------------------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5) |
+------------------------------------------------------+
| [4, 0, 5, 1, 2]                                      |
+------------------------------------------------------+

La evaluación se realiza de izquierda a derecha.

Esto es lo que sucede si cambiamos la path /value argumentos en torno a:

SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4);

Resultado:

+------------------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4) |
+------------------------------------------------------+
| [4, 0, 1, 5, 2]                                      |
+------------------------------------------------------+

Matrices Múltiples

Puede insertar valores en más de una matriz dentro de la misma llamada a JSON_ARRAY_INSERT() .

Ejemplo:

SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';

SELECT JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5);

Resultado:

+--------------------------------------------------------+
| JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5) |
+--------------------------------------------------------+
| {"a": [0, 4, 1], "b": [2, 3, 5]}                       |
+--------------------------------------------------------+

Matrices anidadas

Aquí hay un ejemplo de cómo insertar un valor en una matriz anidada:

SET @json_doc = '[0, 1, [2, 3]]';

SELECT JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4);

Resultado:

+--------------------------------------------+
| JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4) |
+--------------------------------------------+
| [0, 1, [2, 4, 3]]                          |
+--------------------------------------------+

Documento JSON más grande

Aquí hay un ejemplo con un documento JSON un poco más grande.

También uso JSON_DETAILED() para embellecer el resultado:

SET @json_doc = '{  
    "pet": {    
       "name": "Fluffy", 
       "diet": ["Fish", "Water"]  
    }
 }';
SELECT JSON_DETAILED(
        JSON_ARRAY_INSERT(
            @json_doc, 
            '$.pet.diet[1]', 
            'Chicken')
);

Resultado:

{
    "pet": 
    {
        "name": "Fluffy",
        "diet": 
        [
            "Fish",
            "Chicken",
            "Water"
        ]
    }
}

Argumentos nulos

Si el primer argumento es NULL , el resultado es NULL :

SELECT JSON_ARRAY_INSERT(null, '$[1]', 4);

Resultado:

+------------------------------------+
| JSON_ARRAY_INSERT(null, '$[1]', 4) |
+------------------------------------+
| NULL                               |
+------------------------------------+

Lo mismo se aplica a la path argumento:

SELECT JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4);

Resultado:

+--------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4) |
+--------------------------------------------+
| NULL                                       |
+--------------------------------------------+

Sin embargo, si el value el argumento es NULL , luego NULL se inserta en la matriz:

SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null);

Resultado:

+----------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null) |
+----------------------------------------------+
| [0, null, 1, 2]                              |
+----------------------------------------------+

También puede usar JSON_ARRAY_APPEND() para agregar valores a una matriz.