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

JSON_REPLACE() - Remplacer les valeurs dans un document JSON dans MySQL

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] ...)

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 avec 9 . C'est parce que nous avons spécifié $.b comme deuxième argument, et 9 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"]}} |+------------ -------------------------------------------------- ------------------+