Dans MySQL, le JSON_MERGE_PRESERVE()
La fonction fusionne deux ou plusieurs documents JSON et renvoie le résultat.
Vous fournissez les documents JSON comme arguments.
Cette fonction a été ajoutée dans MySQL 8.0.3 comme synonyme de JSON_MERGE()
, cependant, le JSON_MERGE()
est désormais obsolète et susceptible d'être supprimée dans une future version de MySQL.
Syntaxe
La syntaxe ressemble à ceci :
JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)
Où json_doc
sont les documents JSON à fusionner.
Si l'un des documents n'est pas valide, une erreur est générée.
Si un argument est NULL
, cette fonction renvoie NULL
.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
SELECT JSON_MERGE_PRESERVE('{"Name":"Homer"}', '{"Age":39}') Résultat ;
Résultat :
+------------------------------+| Résultat |+------------------------------+| {"Âge":39 ans, "Nom":"Homère"} |+------------------------------+Ainsi, dans cet exemple, nous avons fusionné deux objets distincts en un seul objet.
C'est exactement le même résultat que nous obtiendrions si nous utilisions le
JSON_MERGE_PATCH()
une fonction. Cependant, si nous essayons de fusionner des clés en double, ces deux fonctions produiront des résultats différents.Exemple 2 - Clés en double
Comme son nom l'indique, le
JSON_MERGE_PRESERVE()
la fonction préserve les membres avec des clés en double (c'est là qu'elle diffère duJSON_MERGE_PATCH()
fonction).SELECT JSON_MERGE_PRESERVE('{"Name":"Barthélemy"}', '{"Name":"Bart"}') Résultat ;Résultat :
+-----------------------------------+| Résultat |+-----------------------------------+| {"Nom":["Barthélemy", "Bart"]} |+--------------------------------- --+Donc, dans ce cas, un tableau a été créé et Bart et Bartholomew ont été ajoutés en tant qu'éléments distincts de ce tableau.
Ceci est en contraste avec le
JSON_MERGE_PATCH()
fonction, qui fait ce qui suit :SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Résultat ;Résultat :
+------------------+| Résultat |+------------------+| {"Name":"Bart"} |+------------------+Exemple 3 – Plusieurs membres
Voici un autre exemple, mais avec un membre supplémentaire dans l'objet :
SELECT JSON_MERGE_PRESERVE('{"Name":"Barthélemy", "Âge":10}', '{"Name":"Bart"}') Résultat ;Résultat :
+------------------------------------------------------------ +| Résultat |+------------------------------------------------------------+ | {"Âge":10, "Nom":["Barthélemy", "Bart"]} |+--------------------------- -------------------+Cela fonctionne également dans l'autre sens - le résultat est le même si nous ajoutons le membre supplémentaire au deuxième objet.
SELECT JSON_MERGE_PRESERVE('{"Name":"Bartholomew"}', '{"Name":"Bart", "Age":10}') Résultat ;Résultat :
+------------------------------------------------------------ +| Résultat |+------------------------------------------------------------+ | {"Âge":10, "Nom":["Barthélemy", "Bart"]} |+--------------------------- -------------------+Exemple 4 – Plus de documents
Vous n'êtes pas limité à la fusion de deux documents. Vous pouvez en fusionner autant que nécessaire. Voici un exemple de fusion de trois objets.
SELECT JSON_MERGE_PRESERVE('{"Name":"Bart"}', '{"Age":10}', '{"Hair Color":"Yellow"}') Résultat ;Résultat :
+------------------------------------------------------------ -------+| Résultat |+------------------------------------------------------------ ------+| {"Âge":10, "Nom":"Bart", "Couleur de cheveux":"Jaune"} |+------------------------ -----------------------------+Exemple 5 – Tableaux
Voici un exemple de fusion de deux tableaux du même nom :
SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboard"]}') Résultat ;Résultat :
+------------------------------------------------------------ ---------+| Résultat |+------------------------------------------------------------ --------+| {"Loisirs":["Trouble", "Mischief", "Skateboard"]} |+-------------------------------------- --------------------------+Ceci est un autre exemple où
JSON_MERGE_PATCH()
renverrait un résultat différent.Évidemment, si les tableaux ont des noms différents, ils finiront comme des tableaux séparés (mais dans le même document JSON) :
SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobby":["Skateboard"]}') Résultat ;Résultat :
+------------------------------------------------------------ --------------------+| Résultat |+------------------------------------------------------------ -------------------+| {"Hobby":["Skateboard"], "Loisirs":["Trouble", "Méfait"]} |+----------------------- ------------------------------------------------+Exemple 6 - Un document JSON plus grand
Voici un exemple qui fusionne des documents JSON (légèrement) plus volumineux.
SET @data1 ='{ "Suspect":{ "Name":"Bart", "Hobbies":["Skateboard", "Mischief"] } }', @data2 ='{ "Suspect":{ " Age":10, "Parents":["Marge", "Homer"], "Loisirs":["Trouble"] } }';SELECT JSON_MERGE_PRESERVE(@data1, @data2) Résultat ;Résultat :
+------------------------------------------------------------ -------------------------------------------------- ------------------------------+| Résultat |+------------------------------------------------------------ -------------------------------------------------- -----------------------------+| {"Suspect":{"Age":10, "Name":"Bart", "Hobbies":["Skateboard", "Mischief", "Trouble"], "Parents":["Marge", "Homer" ]}} |+--------------------------------------------- -------------------------------------------------- -------------------------------+Pour les règles exactes sur la façon dont cette fonction effectue les fusions, consultez la documentation MySQL.