MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

MariaDB JSON_ARRAY_INSERT() expliqué

Dans MariaDB, JSON_ARRAY_INSERT() est une fonction intégrée qui insère une valeur dans un document JSON et renvoie le résultat.

Syntaxe

La syntaxe ressemble à ceci :

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

json_doc est le document JSON, path est le chemin d'accès à l'endroit où vous souhaitez insérer la ou les valeurs, et value est la valeur à insérer.

Exemple

Voici un exemple pour illustrer.

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

Résultat :

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

Dans ce cas, la valeur 3 a été inséré dans le tableau à la position 1 . Les tableaux sont basés sur zéro, il devient donc le deuxième élément du tableau.

Insérer plusieurs valeurs

Vous pouvez insérer plusieurs valeurs dans un seul appel à JSON_ARRAY_INSERT() .

Exemple :

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

Résultat :

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

L'évaluation se fait de gauche à droite.

Voici ce qui se passe si nous changeons le path /value arguments autour :

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

Résultat :

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

Plusieurs tableaux

Vous pouvez insérer des valeurs dans plusieurs tableaux dans le même appel à JSON_ARRAY_INSERT() .

Exemple :

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

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

Résultat :

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

Tableaux imbriqués

Voici un exemple d'insertion d'une valeur dans un tableau imbriqué :

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

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

Résultat :

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

Document JSON plus grand

Voici un exemple avec un document JSON légèrement plus grand.

J'utilise aussi JSON_DETAILED() pour embellir le résultat :

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

Résultat :

{ "pet":{ "name":"Fluffy", "diet":[ "Poisson", "Poulet", "Eau" ] }}

Arguments nuls

Si le premier argument est NULL , le résultat est NULL :

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

Résultat :

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

Il en va de même pour le path argument :

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

Résultat :

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

Cependant, si la value l'argument est NULL , puis NULL est inséré dans le tableau :

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

Résultat :

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

Vous pouvez également utiliser JSON_ARRAY_APPEND() pour ajouter des valeurs à un tableau.