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

MariaDB JSON_SET() expliqué

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

JSON_SET() peut mettre à jour et insérer des données, alors que JSON_INSERT() ne peut insérer que des données, et JSON_REPLACE() peut uniquement mettre à jour les données.

Syntaxe

La syntaxe ressemble à ceci :

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

Où :

  • json_doc est le document JSON.
  • path est le chemin de l'élément pour lequel insérer des données ou mettre à jour la valeur.
  • val est la nouvelle valeur.

Exemple

Voici un exemple pour illustrer.

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Cat" 
    }
';

SELECT JSON_SET(@json, '$.type', 'Dog');

Résultat :

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

Dans ce cas, j'ai mis à jour la valeur du type membre Cat à Dog .

Éléments de tableau

Pour mettre à jour ou insérer un élément de tableau, spécifiez l'index de l'élément :

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

SELECT JSON_SET(@json, '$.scores[1]', 7);

Résultat :

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

Dans ce cas, le deuxième élément du tableau a été mis à jour avec la nouvelle valeur. Les tableaux sont basés sur zéro, et donc $.scores[1] fait référence au deuxième élément du tableau.

Insérer des données

Les exemples précédents ont mis à jour les données existantes. Voici un exemple d'insertion de nouvelles données :

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Dog" 
    }
';

SELECT JSON_SET(@json, '$.weight', 10);

Résultat :

+----------------------------------------------+
| JSON_SET(@json, '$.weight', 10)              |
+----------------------------------------------+
| {"name": "Wag", "type": "Dog", "weight": 10} |
+----------------------------------------------+

Ici, nous avons inséré une nouvelle paire clé/valeur ("weight": 10 ).

Voici un exemple d'ajout d'un nouvel élément à un tableau :

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

SELECT JSON_SET(@json, '$.scores[3]', 7);

Résultat :

+-----------------------------------------+
| JSON_SET(@json, '$.scores[3]', 7)       |
+-----------------------------------------+
| {"name": "Wag", "scores": [8, 0, 9, 7]} |
+-----------------------------------------+

Cet exemple de tableau pourrait également être fait avec JSON_ARRAY_INSERT() ou JSON_ARRAY_APPEND() .

Chemins multiples

La syntaxe permet de définir/mettre à jour des valeurs sur plusieurs chemins avec un seul appel à JSON_SET() .

Exemple :

SET @json = '
    { 
        "name" : "Scratch", 
        "type" : "Rat"
    }
';

SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);

Résultat :

+--------------------------------------------------+
| JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) |
+--------------------------------------------------+
| {"name": "Scratch", "type": "Cat", "weight": 10} |
+--------------------------------------------------+

Dans l'exemple suivant, nous insérons une nouvelle valeur dans un tableau et en mettons à jour une autre :

SET @json = '{ "scores" : [ 0, 1, 2 ] }';

SELECT 
    JSON_SET(
        @json, 
        '$.scores[1]', "a", 
        '$.scores[3]', "b"
    ) AS Result;

Résultat :

+------------------------------+
| Result                       |
+------------------------------+
| {"scores": [0, "a", 2, "b"]} |
+------------------------------+

Arguments nuls

Si le json_doc ou l'un des path arguments est null , le résultat est NULL . Mais si la value l'argument est null , alors la valeur est remplacée par null .

SELECT 
    JSON_SET(null, '$.a', 1) AS a,
    JSON_SET('{"a":1}', null, 1) AS b,
    JSON_SET('{"a":1}', '$.a', null) AS c;

Résultat :

+------+------+-------------+
| a    | b    | c           |
+------+------+-------------+
| NULL | NULL | {"a": null} |
+------+------+-------------+

Dans l'exemple suivant, l'un des arguments de chemin manque à chaque appel à JSON_SET() . Dans les deux cas, le résultat est NULL :

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Cat" 
    }
';

SELECT 
    JSON_SET(@json, null, 'Bark', '$.type', 'Dog') AS a,
    JSON_SET(@json, '$.name', 'Bark', null, 'Dog') AS b;

Résultat :

+------+------+
| a    | b    |
+------+------+
| NULL | NULL |
+------+------+

Nombre de paramètres incorrect

Appel de JSON_SET() sans argument génère une erreur :

SELECT JSON_SET();

Résultat :

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

C'est pareil quand pas assez d'arguments sont passés :

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

Résultat :

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