Dans MySQL, le JSON_MERGE_PATCH() La fonction effectue une fusion conforme à la RFC 7396 de deux documents JSON ou plus, sans conserver les membres ayant des clés en double.
Vous fournissez les documents JSON comme arguments.
Syntaxe
La syntaxe ressemble à ceci :
JSON_MERGE_PATCH(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.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
SELECT JSON_MERGE_PATCH('{"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.
Exemple 2 - Clés en double
Comme mentionné, cette fonction ne conserve pas les membres avec des clés en double. Exemple :
SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Résultat ;
Résultat :
+------------------+| Résultat |+------------------+| {"Name":"Bart"} |+------------------+
Donc dans ce cas, Bart a gagné.
Si vous avez besoin de conserver les membres avec des clés en double, utilisez le JSON_MERGE_PRESERVE() fonction à la place. L'utilisation de cette fonction pour cet exemple transformerait Name dans un tableau contenant à la fois Bartholomew et Bart . Comme ceci :
SELECT JSON_MERGE_PRESERVE('{"Name":"Barthélemy"}', '{"Name":"Bart"}') Résultat ;
Résultat :
+-----------------------------------+| Résultat |+-----------------------------------+| {"Nom":["Barthélemy", "Bart"]} |+--------------------------------- --+ Exemple 3 – Plusieurs membres
Voici un autre exemple, mais avec un membre supplémentaire dans l'objet :
SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew", "Age":10}', '{"Name":"Bart"}') Résultat ;
Résultat :
+-----------------------------+| Résultat |+--------------------------------------+| {"Âge":10, "Nom":"Bart"} |+------------------------------------------+
Ainsi, Bart gagne toujours, et il a été fusionné avec les autres membres du premier objet.
Bien sûr, 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_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart", "Age":10}') Résultat ;
Résultat :
+-----------------------------+| Résultat |+--------------------------------------+| {"Âge":10, "Nom":"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_PATCH('{"Name":"Bart"}', '{"Age":10}', '{"Hair Color":"Yellow"}') Résultat ;
Résultat :
+------------------------------------------------------------ -------+| Résultat |+------------------------------------------------------------ ------+| {"Âge":10, "Nom":"Bart", "Couleur de cheveux":"Jaune"} |+------------------------ -----------------------------+ Exemple 5 – Tableaux
La fusion de deux tableaux du même nom n'en conservera qu'un :
SELECT JSON_MERGE_PATCH('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboard"]}') Résultat ;
Résultat :
+---------------------------------------------+| Résultat |+---------------------------------------------+| {"Loisirs":["Skateboard"]} |+--------------------------------+
Encore une fois, vous pouvez utiliser JSON_MERGE_PRESERVE() si vous devez conserver les deux tableaux. Ainsi, l'exemple précédent peut être réécrit comme suit :
SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboard"]}') Résultat ;
Résultat :
+------------------------------------------------------------ ---------+| Résultat |+------------------------------------------------------------ --------+| {"Loisirs":["Trouble", "Mischief", "Skateboard"]} |+-------------------------------------- --------------------------+ 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"] } }';SELECT JSON_MERGE_PATCH(@data1, @data2) Résultat ;
Résultat :
+------------------------------------------------------------ -------------------------------------------------- -------------------+| Résultat |+------------------------------------------------------------ -------------------------------------------------- ------------------+| {"Suspect":{"Age":10, "Name":"Bart", "Hobbies":["Skateboard", "Mischief"], "Parents":["Marge", "Homer"]}} | +------------------------------------------------------------- -------------------------------------------------- ----------------+
Pour les règles exactes sur la façon dont cette fonction effectue les fusions, consultez la documentation MySQL.