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

JSON_INSERT() - Insérer des valeurs dans un document JSON dans MySQL

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 et 3 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() et JSON_ARRAY_APPEND() si vous devez insérer ou ajouter des données dans un tableau JSON.