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 transformeraitName
dans un tableau contenant à la foisBartholomew
etBart
. 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.