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

JSON_MERGE_PATCH() - Effectuer une fusion conforme à la RFC 7396 des documents JSON dans MySQL

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

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.