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:
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:
Die genauen Regeln, wie diese Funktion Zusammenführungen ausführt, finden Sie in der MySQL-Dokumentation.