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

MariaDB JSON_REPLACE() expliqué

Dans MariaDB, JSON_REPLACE() est une fonction intégrée qui remplace les valeurs existantes dans un document JSON et renvoie le résultat.

Syntaxe

La syntaxe ressemble à ceci :

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

Exemple

Voici un exemple pour illustrer.

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

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

Résultat :

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

Dans ce cas j'ai remplacé la valeur Cat avec Dog .

Éléments de tableau

Pour remplacer un élément de tableau, indiquez l'index de l'élément :

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

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

Résultat :

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

Dans ce cas, le deuxième élément du tableau a été remplacé par 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.

Chemins multiples

La syntaxe permet de remplacer des valeurs sur plusieurs chemins avec un seul appel à JSON_REPLACE() .

Lorsque vous fournissez plusieurs chemins, ils sont évalués de gauche à droite. Cela signifie que le résultat de l'évaluation précédente est utilisé comme valeur pour la suivante.

Tout d'abord, voici un exemple qui remplace plusieurs valeurs dans un document, en fonction de leur clé :

SET @json = '
    { 
        "name" : "Flutter", 
        "type" : "Bird",
        "weight" : 10
    }
';

SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);

Résultat :

+------------------------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) |
+------------------------------------------------------+
| {"name": "Flutter", "type": "Bat", "weight": 20}     |
+------------------------------------------------------+

Chaque valeur a été remplacée comme prévu.

Dans l'exemple suivant, nous remplaçons plusieurs éléments dans un tableau :

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

SELECT 
    JSON_REPLACE(
        @json, 
        '$.scores[2]', "a", 
        '$.scores[4]', "b"
    ) AS Result;

Résultat :

+------------------------------------+
| Result                             |
+------------------------------------+
| {"scores": [0, 1, "a", 3, "b", 5]} |
+------------------------------------+

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_REPLACE(null, '$.a', 1) AS a,
    JSON_REPLACE('{"a":1}', null, 1) AS b,
    JSON_REPLACE('{"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 est manquant dans chaque appel à JSON_REPLACE() . Cela se traduit par NULL renvoyé pour les deux appels :

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

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

Résultat :

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

Nombre de paramètres incorrect

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

SELECT JSON_REPLACE();

Résultat :

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

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

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

Résultat :

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

Fonctions similaires

Le JSON_INSERT() la fonction peut insérer de nouvelles données.

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