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 zuName
werden in ein Array, das sowohlBartholomew
enthält undBart
. 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.