Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JSON_MERGE_PATCH() – Führen Sie eine RFC 7396-konforme Zusammenführung von JSON-Dokumenten in MySQL durch

In MySQL der JSON_MERGE_PATCH() -Funktion führt eine RFC 7396-konforme Zusammenführung von zwei oder mehr JSON-Dokumenten durch, ohne Mitglieder mit doppelten Schlüsseln beizubehalten.

Sie geben die JSON-Dokumente als Argumente an.

Syntax

Die Syntax lautet wie folgt:

JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)

Wobei json_doc sind die zusammenzuführenden JSON-Dokumente. Wenn eines der Dokumente ungültig ist, wird ein Fehler ausgelöst.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein Beispiel zur Veranschaulichung.

SELECT JSON_MERGE_PATCH('{"Name":"Homer"}', '{"Alter":39}') Ergebnis;

Ergebnis:

+------------------------------+| Ergebnis |+------------------------------+| {"Alter":39, "Name":"Homer"} |+------------------------------+ 

In diesem Beispiel haben wir also zwei separate Objekte zu einem Objekt zusammengeführt.

Beispiel 2 – Doppelte Schlüssel

Wie bereits erwähnt, behält diese Funktion Mitglieder mit doppelten Schlüsseln nicht bei. Beispiel:

SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Ergebnis;

Ergebnis:

+------------------+| Ergebnis |+------------------+| {"Name":"Bart"} |+------------------+

In diesem Fall hat also Bart gewonnen.

Wenn Sie Mitglieder mit doppelten Schlüsseln beibehalten müssen, verwenden Sie JSON_MERGE_PRESERVE() funktionieren stattdessen. Die Verwendung dieser Funktion für dieses Beispiel würde zu Name werden in ein Array, das sowohl Bartholomew enthält und Bart . So:

SELECT JSON_MERGE_PRESERVE('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Ergebnis;

Ergebnis:

+-----------------------------------+| Ergebnis |+-----------------------------------+| {"Name":["Bartholomäus", "Bart"]} |+---------------------------------------------- --+

Beispiel 3 – Mehrere Mitglieder

Hier ist ein weiteres Beispiel, aber mit einem zusätzlichen Member im Objekt:

SELECT JSON_MERGE_PATCH('{"Name":"Bartholomäus", "Alter":10}', '{"Name":"Bart"}') Ergebnis;

Ergebnis:

+-------------------------------------+| Ergebnis |+-------------------------------------+| {"Alter":10, "Name":"Bart"} |+--------------------------------------+

Bart gewinnt also immer noch und wurde mit den anderen Mitgliedern des ersten Objekts zusammengeführt.

Das funktioniert natürlich auch umgekehrt – das Ergebnis ist das gleiche, wenn wir das zusätzliche Mitglied zum zweiten Objekt hinzufügen.

SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart", "Alter":10}') Ergebnis;

Ergebnis:

+-------------------------------------+| Ergebnis |+-------------------------------------+| {"Alter":10, "Name":"Bart"} |+--------------------------------------+

Beispiel 4 – Weitere Dokumente

Sie sind nicht darauf beschränkt, nur zwei Dokumente zusammenzuführen. Sie können beliebig viele zusammenführen. Hier ist ein Beispiel für das Zusammenführen von drei Objekten.

SELECT JSON_MERGE_PATCH('{"Name":"Bart"}', '{"Alter":10}', '{"Haarfarbe":"Gelb"}') Ergebnis;

Ergebnis:

+---------------------------------------------- -------+| Ergebnis |+------------------------------------------------------------ ------+| {"Alter":10, "Name":"Bart", "Haarfarbe":"Gelb"} |+------------------------ -----------------------------+

Beispiel 5 – Arrays

Das Zusammenführen von zwei Arrays mit demselben Namen führt dazu, dass nur eines davon erhalten bleibt:

SELECT JSON_MERGE_PATCH('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Ergebnis;

Ergebnis:

+-------------------------------+| Ergebnis |+-------------------------------+| {"Hobbies":["Skateboarden"]} |+-------------------------------+

Auch hier können Sie JSON_MERGE_PRESERVE() verwenden wenn Sie beide Arrays beibehalten müssen. Das vorherige Beispiel kann also wie folgt umgeschrieben werden:

SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Ergebnis;

Ergebnis:

+---------------------------------------------- ---------+| Ergebnis |+------------------------------------------------------------ --------+| {"Hobbies":["Ärger", "Unfug", "Skateboarden"]} |+----------------------------------------- --------------------------+

Beispiel 6 – Ein größeres JSON-Dokument

Hier ist ein Beispiel, das (etwas) größere JSON-Dokumente zusammenführt.

SET @data1 ='{ "Suspect":{ "Name":"Bart", "Hobbies":["Skateboarding", "Mischief"] } }', @data2 ='{ "Suspect":{ " Alter":10, "Eltern":["Marge", "Homer"] } }';SELECT JSON_MERGE_PATCH(@data1, @data2) Ergebnis;

Ergebnis:

+---------------------------------------------- -------------------------------------------------- -------------------+| Ergebnis |+------------------------------------------------------------ -------------------------------------------------- ------------------+| {"Verdächtiger":{"Alter":10, "Name":"Bart", "Hobbies":["Skateboarding", "Unfug"], "Eltern":["Marge", "Homer"]}} | +------------------------------------------------------------- -------------------------------------------------- ----------------+

Die genauen Regeln, wie diese Funktion Zusammenführungen ausführt, finden Sie in der MySQL-Dokumentation.