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

MariaDB JSON_ARRAY_APPEND() expliqué

Dans MariaDB, JSON_ARRAY_APPEND() est une fonction intégrée qui ajoute des valeurs à la fin du ou des tableaux spécifiés dans un document JSON et renvoie le résultat.

Syntaxe

La syntaxe ressemble à ceci :

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

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

Exemple

Voici un exemple pour illustrer la fonction.

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

SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4);

Résultat :

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

Dans ce cas, la valeur 4 a été ajouté à la fin du tableau.

Ajouter plusieurs valeurs

Vous pouvez ajouter plusieurs valeurs dans un seul appel à JSON_ARRAY_APPEND() .

Exemple :

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

SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5);

Résultat :

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

Plusieurs tableaux

Vous pouvez ajouter des valeurs à plusieurs tableaux dans le même appel à JSON_ARRAY_APPEND() .

Exemple :

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

SELECT JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5);

Résultat :

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

Tableaux imbriqués

Voici un exemple d'ajout d'une valeur à un tableau imbriqué :

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

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

Résultat :

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

Et dans l'exemple suivant, le document JSON d'origine ne contient pas de tableau imbriqué, mais JSON_ARRAY_APPEND() crée un tableau imbriqué basé sur notre chemin :

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

SELECT JSON_ARRAY_APPEND(@json_doc, '$[3]', 4);

Résultat :

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

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", "Chicken"]  
    }
 }';
SELECT JSON_DETAILED(
        JSON_ARRAY_APPEND(
            @json_doc, 
            '$.pet.diet', 
            'Water')
);

Résultat :

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

Et en voici un qui crée un tableau imbriqué :

SET @json_doc = '{  
    "pet": {    
       "name": "Scratch", 
       "diet": ["Beef", "Water"]
    }
 }';
SELECT JSON_DETAILED(
        JSON_ARRAY_APPEND(
            @json_doc, 
            '$.pet.diet[1]', 
            'Beer')
);

Résultat :

{
    "pet": 
    {
        "name": "Scratch",
        "diet": 
        [
            "Beef",
            
            [
                "Water",
                "Beer"
            ]
        ]
    }
}

Arguments nuls

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

SELECT JSON_ARRAY_APPEND(null, '$', 4);

Résultat :

+---------------------------------+
| JSON_ARRAY_APPEND(null, '$', 4) |
+---------------------------------+
| NULL                            |
+---------------------------------+

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

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

SELECT JSON_ARRAY_APPEND(@json_doc, null, 4);

Résultat :

+---------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, null, 4) |
+---------------------------------------+
| NULL                                  |
+---------------------------------------+

Cependant, si la value l'argument est NULL , puis NULL est ajouté au tableau :

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

SELECT JSON_ARRAY_APPEND(@json_doc, '$', null);

Résultat :

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

Vous pouvez également utiliser JSON_ARRAY_INSERT() pour insérer des valeurs dans un tableau.