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

JSON_SET() - Insérer ou mettre à jour des valeurs dans un document JSON dans MySQL

Dans MySQL, le JSON_SET() La fonction insère ou met à jour des valeurs dans un document JSON et renvoie le résultat.

Vous fournissez le document JSON comme premier argument, suivi du chemin d'accès dans lequel insérer, suivi de la valeur à insérer. Vous pouvez fournir plusieurs paires chemin/valeur si vous devez mettre à jour plusieurs valeurs.

Syntaxe

La syntaxe ressemble à ceci :

JSON_SET(json_doc, chemin, val[, chemin, 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.

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.

Une erreur se produit si le premier argument n'est pas un document JSON valide, ou si un argument de chemin n'est pas une expression de chemin valide ou contient un * ou ** caractère générique.

Exemple 1 - Insérer une valeur

Voici un exemple pour montrer comment insérer une valeur à l'aide de cette fonction.

SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) AS 'Résultat' ;

Résultat :

+-----------------------------------+| Résultat |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+ 

Dans ce cas, le 3ème argument est inséré dans le tableau au chemin spécifié. J'utilise $.c pour le chemin et 3 pour la valeur à insérer. Il en résulte une paire clé/valeur de "c": 3 .

Voici un autre exemple :

SELECT JSON_SET('{"Name":"Homer", "Gender":"Homme"}', '$.Age', 39) AS 'Result' ;

Résultat :

+------------------------------------------------------------ --+| Résultat |+------------------------------------------------------------ -+| {"Âge":39, "Nom":"Homère", "Sexe":"Homme"} |+------------------------- -----------------------+

Exemple 2 - Mettre à jour une valeur

L'exemple précédent a inséré une valeur. Cet exemple met à jour une valeur existante.

SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) AS 'Résultat' ;

Résultat :

+------------------+| Résultat |+------------------+| {"a":1, "b":3} |+-----------------+

Voici un autre exemple :

SELECT JSON_SET('{"Name":"Homer", "Sexe":"Homme"}', '$.Name', "Bart") AS 'Result' ;

Résultat :

+--------------------------------------------------+| Résultat |+--------------------------------------------------+| {"Nom":"Bart", "Sexe":"Homme"} |+------------------------------- -----+

Exemple 3 – Tableaux

Vous pouvez insérer des valeurs dans un tableau en utilisant un chemin après la fin du tableau existant. Exemple :

SELECT JSON_SET('[1, 2, 3]', '$[3]', 4) AS 'Résultat' ;

Résultat :

+--------------+| Résultat |+--------------+| [1, 2, 3, 4] |+--------------+

Cependant, si vous utilisez un chemin qui existe déjà dans le tableau, la valeur sera mise à jour :

SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) AS 'Résultat' ;

Résultat :

+-----------+| Résultat |+-----------+| [1, 4, 3] |+-----------+

Si la valeur existante n'est pas un tableau, elle est automatiquement enveloppée sous forme de tableau, puis étendue avec la nouvelle valeur. Exemple :

SELECT JSON_SET('{"a":1, "b":2}', '$[2]', 3) AS 'Résultat' ;

Résultat :

+-----------------------+| Résultat |+-----------------------+| [{"a":1, "b":2}, 3] |+-----------------------+

Exemple 4 – Valeurs multiples

Vous pouvez insérer/mettre à jour plusieurs valeurs à la fois. Ajoutez simplement chaque paire clé/valeur séparée par une virgule. Exemple :

SELECT JSON_SET('{"a":1, "b":2, "c":3}', '$.a', 9, '$.c', 'Bart') AS 'Résultat';

Résultat :

+---------------------------------------------+| Résultat |+-------------------------------+| {"a":9, "b":2, "c":"Bart"} |+--------------------------- ----+

Exemple 5 - Un document JSON plus grand

Voici un exemple avec un document JSON (légèrement) plus grand.

SET @data ='{ "Person":{ "Name":"Homer", "Hobbies":["Manger", "Dormir"] } }';SELECT JSON_SET(@data, '$.Person. Nom', 'Bart', '$.Person.Hobbies[1]', "Méfait") AS 'Résultat';

Résultat :

+------------------------------------------------------------ -------------------+| Résultat |+------------------------------------------------------------ ------------------+| {"Person":{"Name":"Bart", "Hobbies":["Manger", "Mischief"]}} |+------------------- ----------------------------------------------+

Voir aussi JSON_INSERT() pour insérer des valeurs sans remplacer les valeurs existantes, et JSON_REPLACE() pour remplacer uniquement les valeurs existantes.