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

MariaDB JSON_INSERT() expliqué

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

Syntaxe

La syntaxe ressemble à ceci :

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

json_doc est le document JSON, path est le chemin d'accès où les données doivent être insérées, et val est la valeur à insérer dans ce chemin.

Exemple

Voici un exemple pour illustrer.

SET @json_document = '
    { 
        "name": "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.type', "Dog");

Résultat :

+----------------------------------------------+
| JSON_INSERT(@json_document, '$.type', "Dog") |
+----------------------------------------------+
| {"name": "Wag", "type": "Dog"}               |
+----------------------------------------------+

Ici, j'ai inséré "type": "Dog" dans le document.

Dans ce cas, j'ai utilisé $.type comme chemin. Par conséquent, type est la clé et Dog est la valeur.

Lorsque le chemin existe déjà

Si vous transmettez un chemin qui existe déjà dans le document JSON, le document d'origine est renvoyé tel quel.

Exemple :

SET @json_document = '
    { 
        "name": "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.name', "Bark");

Résultat :

+-----------------------------------------------+
| JSON_INSERT(@json_document, '$.name', "Bark") |
+-----------------------------------------------+
| {"name": "Wag"}                               |
+-----------------------------------------------+

Insérer des tableaux

Voici un exemple d'insertion d'un tableau dans un document JSON :

SET @json_document = '
    { 
        "name" : "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]');

Résultat :

+--------------------------------------------------------+
| JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]') |
+--------------------------------------------------------+
| {"name": "Wag", "scores": "[ 8, 7, 9 ]"}               |
+--------------------------------------------------------+

Ajout aux tableaux

Voici un exemple d'utilisation de JSON_INSERT() pour ajouter des données à un tableau :

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog" ] 
    }
';
SELECT JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog");

Résultat :

+--------------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog")    |
+--------------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog", "Biggest Dog"]} |
+--------------------------------------------------------------+

Cependant, bien que cela ait bien fonctionné pour cet exemple, cela aurait facilement pu échouer. Par exemple, si nous essayons d'insérer la valeur à un autre endroit du tableau, cela ne fonctionne pas :

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog" ] 
    }
';
SELECT JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog");

Résultat :

+-----------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog") |
+-----------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog"]}             |
+-----------------------------------------------------------+

Pour insérer des valeurs dans un tableau, utilisez le JSON_ARRAY_INSERT() fonction à la place.

De plus, bien que nous ayons pu ajouter une valeur à un tableau dans l'exemple ci-dessus, vous feriez probablement mieux d'utiliser le JSON_ARRAY_APPEND() fonction, car il est conçu spécifiquement à cette fin.

Objets imbriqués

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

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog"
            }
        }
    }
';
SELECT JSON_INSERT(
    @json_document, 
    '$.details.awards.Sumo 2020',
    'Biggest Dog'
    );

Résultat :

{"_id": 1, "name": "Wag", "details": {"type": "Dog", "weight": 20, "awards": {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"}}}

Embellissez le résultat

Nous pouvons utiliser le JSON_DETAILED() fonction pour rendre le résultat plus lisible :

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog"
            }
        }
    }
';
SELECT 
    JSON_DETAILED(
        JSON_INSERT(
            @json_document, 
            '$.details.awards.Sumo 2020',
            'Biggest Dog'
        )
    );

Résultat :

{
    "_id": 1,
    "name": "Wag",
    "details": 
    {
        "type": "Dog",
        "weight": 20,
        "awards": 
        {
            "Florida Dog Awards": "Top Dog",
            "New York Marathon": "Fastest Dog",
            "Sumo 2020": "Biggest Dog"
        }
    }
}

Arguments nuls

Si l'un des json_document ou path les arguments sont NULL , le résultat est NULL :

SELECT 
    JSON_INSERT(null, '$.type', 'Dog'),
    JSON_INSERT('{"a":1}', null, 'Dog');

Résultat :

+------------------------------------+-------------------------------------+
| JSON_INSERT(null, '$.type', 'Dog') | JSON_INSERT('{"a":1}', null, 'Dog') |
+------------------------------------+-------------------------------------+
| NULL                               | NULL                                |
+------------------------------------+-------------------------------------+

Cependant, si la value l'argument est NULL , la clé est ajoutée au chemin spécifié, avec une valeur de null :

SELECT JSON_INSERT('{"a":1}', '$.type', null);

Résultat :

+----------------------------------------+
| JSON_INSERT('{"a":1}', '$.type', null) |
+----------------------------------------+
| {"a": 1, "type": null}                 |
+----------------------------------------+

Nombre de paramètres incorrect

Ne fournir aucun argument génère une erreur :

SELECT JSON_INSERT();

Résultat :

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_INSERT'

Il en va de même lorsque vous fournissez trop ou trop peu d'arguments :

SELECT JSON_INSERT('{ "a": 1}');

Résultat :

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_INSERT'

Fonctions similaires

Le JSON_REPLACE() la fonction peut mettre à jour les données existantes.

Le JSON_SET() La fonction peut mettre à jour les données existantes et insérer de nouvelles données. Donc JSON_SET() est comme JSON_INSERT() et JSON_REPLACE() en une seule fonction.