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 et3
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, etJSON_REPLACE()
pour remplacer uniquement les valeurs existantes.