MariaDB
 sql >> Database >  >> RDS >> MariaDB

Spiegazione di MariaDB JSON_ARRAY_INSERT()

In MariaDB, JSON_ARRAY_INSERT() è una funzione incorporata che inserisce un valore in un documento JSON e restituisce il risultato.

Sintassi

La sintassi è questa:

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

Dove json_doc è il documento JSON, path è il percorso in cui vuoi inserire il/i valore/i e il value è il valore da inserire.

Esempio

Ecco un esempio da dimostrare.

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

Risultato:

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

In questo caso, il valore 3 è stato inserito nell'array nella posizione 1 . Gli array sono a base zero, quindi diventa il secondo elemento nell'array.

Inserisci più valori

Puoi inserire più valori in una singola chiamata a JSON_ARRAY_INSERT() .

Esempio:

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

Risultato:

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

La valutazione viene eseguita da sinistra a destra.

Ecco cosa succede se cambiamo il path /value argomenti in giro:

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

Risultato:

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

Matrici multiple

Puoi inserire valori in più di un array all'interno della stessa chiamata a JSON_ARRAY_INSERT() .

Esempio:

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

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

Risultato:

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

Matrici nidificate

Ecco un esempio di inserimento di un valore in una matrice nidificata:

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

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

Risultato:

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

Documento JSON più grande

Ecco un esempio con un documento JSON leggermente più grande.

Uso anche JSON_DETAILED() per abbellire il risultato:

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

Risultato:

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

Argomenti nulli

Se il primo argomento è NULL , il risultato è NULL :

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

Risultato:

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

Lo stesso vale per il path argomento:

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

Risultato:

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

Tuttavia, se il value l'argomento è NULL , quindi NULL viene inserito nell'array:

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

Risultato:

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

Puoi anche usare JSON_ARRAY_APPEND() per aggiungere valori a una matrice.