Dans MySQL, le JSON_INSERT()
La fonction insère une valeur 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.
Syntaxe
La syntaxe ressemble à ceci :
JSON_INSERT(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 la nouvelle valeur.val
est la nouvelle valeur qui sera insérée.
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.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) AS 'Résultat' ;
Résultat :
+-----------------------------------+| Résultat |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+Ainsi, le 3ème argument est inséré dans le tableau au chemin spécifié. Dans ce cas, 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_INSERT('{"Name":"Homer", "Gender":"Homme"}', '$.Age', 39) AS 'Result' ;Résultat :
+------------------------------------------------------------ --+| Résultat |+------------------------------------------------------------ -+| {"Âge":39, "Nom":"Homère", "Sexe":"Homme"} |+------------------------- -----------------------+Exemple 2 - Essayer d'écraser un chemin existant
Une paire chemin-valeur pour un chemin existant dans le document est ignorée et n'écrase pas la valeur du document existant.
Donc, si nous modifions l'exemple précédent pour insérer une valeur à
Name
(qui existe déjà), aucune insertion n'a lieu :SELECT JSON_INSERT('{"Name":"Homer", "Sexe":"Homme"}', '$.Name', "Bart") AS 'Result' ;Résultat :
+--------------------------------------------------+| Résultat |+--------------------------------------------------+| {"Nom":"Homère", "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_INSERT('[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, le tableau restera inchangé :
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Résultat' ;Résultat :
+-----------+| Résultat |+-----------+| [1, 2, 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_INSERT('{"a":1, "b":2}', '$[2]', 3) AS 'Résultat' ;Résultat :
+-----------------------+| Résultat |+-----------------------+| [{"a":1, "b":2}, 3] |+-----------------------+Mais encore une fois, si vous essayez d'insérer une valeur à un chemin qui existe déjà, le document JSON reste inchangé :
SELECT JSON_INSERT('{"a":1, "b":2}', '$[0]', 3) AS 'Résultat' ;Résultat :
+------------------+| Résultat |+------------------+| {"a":1, "b":2} |+------------------+Exemple 4 - 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_INSERT(@data, '$.Person. Hobbies[2]', "Base Jumping") AS 'Résultat';Résultat :
+------------------------------------------------------------ -----------------------------------------+| Résultat |+------------------------------------------------------------ -----------------------------------+| {"Person":{"Name":"Homer", "Hobbies":["Manger", "Dormir", "Base Jumping"]}} |+-------------- -------------------------------------------------- ------------------+Voir aussi
JSON_ARRAY_INSERT()
etJSON_ARRAY_APPEND()
si vous devez insérer ou ajouter des données dans un tableau JSON.