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.