Dans MySQL, le JSON_REPLACE()
La fonction remplace les valeurs dans un document JSON et renvoie le résultat.
Vous fournissez le document JSON comme premier argument, suivi du chemin où remplacer les données, suivi de la valeur par laquelle remplacer la valeur existante.
Vous pouvez remplacer des données à plusieurs endroits dans le document si nécessaire. Pour ce faire, fournissez simplement plusieurs paires chemin/valeur selon les besoins.
Syntaxe
La syntaxe ressemble à ceci :
JSON_REPLACE(json_doc, chemin, val[, chemin, val] ...)
Où json_doc
est le document JSON, path
est le chemin où remplacer les données, et val
est la nouvelle valeur pour remplacer la valeur existante.
Les paires chemin/valeur sont évaluées de gauche à droite. Le document produit en évaluant une paire devient la nouvelle valeur par rapport à laquelle la paire suivante est évaluée.
Si la paire chemin/valeur n'existe pas dans le document JSON, elle est ignorée et n'a aucun effet.
Le premier argument doit être un document JSON valide, sinon une erreur se produit.
Aussi, le path
l'argument doit être une expression de chemin valide et ne peut pas contenir de *
ou **
caractère générique, sinon une erreur se produira.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
SELECT JSON_REPLACE('{"a":1, "b":2, "c":3}', '$.b', 9) AS 'Résultat' ;
Résultat :
+-----------------------------------+| Résultat |+--------------------------+| {"a":1, "b":9, "c":3} |+--------------------------+Dans ce cas, nous avons remplacé
b
la valeur de s avec9
. C'est parce que nous avons spécifié$.b
comme deuxième argument, et9
comme troisième.Voici un autre exemple :
SELECT JSON_REPLACE('{"Name":"Bart", "Age":10}', '$.Name', 'Nelson - Ha Ha !') AS 'Result' ;Résultat :
+---------------------------------------------+| Résultat |+---------------------------------------------+| {"Âge":10, "Nom":"Nelson - Ha Ha !"} |+----------------------------- -----------+Exemple 2 - Chemin inexistant
Si vous spécifiez un chemin qui n'existe pas, rien n'est supprimé. Le document JSON d'origine est renvoyé sans modification.
SELECT JSON_REPLACE('{"Name":"Homer", "Age":39}', '$.Gender', 'Male') AS 'Result' ;Résultat :
+------------------------------+| Résultat |+------------------------------+| {"Âge":39 ans, "Nom":"Homère"} |+------------------------------+Exemple 3 – Tableaux
Voici un exemple utilisant un tableau.
SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) AS 'Résultat' ;Résultat :
+-----------+| Résultat |+-----------+| [9, 2, 3] |+-----------+Les tableaux utilisent une numérotation de base zéro, donc dans ce cas, le premier élément est remplacé.
Voici un autre exemple de tableau. Cette fois, nous remplaçons une valeur dans un tableau imbriqué.
SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) AS 'Résultat' ;Résultat :
+-------------------+| Résultat |+-------------------+| [1, 2, [3, 9, 5]] |+-------------------+Exemple 4 – Chemins multiples
Vous pouvez spécifier plusieurs chemins afin de remplacer les données à plusieurs endroits dans le document JSON.
Exemple de base :
SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) AS 'Résultat' ;Résultat :
+------------------+| Résultat |+------------------+| [1, 9, 3, 22, 5] |+-----------------+Exemple 5 - Un document JSON plus grand
Voici un exemple avec un document JSON (légèrement) plus grand.
SET @data ='{ "Person":{ "Name":"Homer", "Age":39, "Hobbies":["Manger", "Dormir"] } }';SELECT JSON_REPLACE(@data , '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') AS 'Result';Résultat :
+------------------------------------------------------------ ----------------------------------+| Résultat |+------------------------------------------------------------ ---------------------------------+| {"Person":{"Age":10, "Name":"Bart", "Hobbies":["Manger", "Base Jumping"]}} |+------------ -------------------------------------------------- ------------------+