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

JSON_MERGE_PRESERVE() - Fusionner plusieurs documents JSON dans MySQL

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] ...)

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 du JSON_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.