In MySQL der JSON_MERGE_PRESERVE()
Funktion führt zwei oder mehr JSON-Dokumente zusammen und gibt das Ergebnis zurück.
Sie geben die JSON-Dokumente als Argumente an.
Diese Funktion wurde in MySQL 8.0.3 als Synonym für JSON_MERGE()
hinzugefügt , jedoch der JSON_MERGE()
Die Funktion ist jetzt veraltet und wird in einer zukünftigen Version von MySQL entfernt.
Syntax
Die Syntax lautet wie folgt:
JSON_MERGE_PRESERVE(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.
Wenn irgendein Argument NULL
ist , gibt diese Funktion NULL
zurück .
Beispiel 1 – Grundlegende Verwendung
Hier ist ein Beispiel zur Veranschaulichung.
SELECT JSON_MERGE_PRESERVE('{"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.
Dies ist genau das gleiche Ergebnis, das wir erhalten würden, wenn wir
JSON_MERGE_PATCH()
verwenden würden Funktion. Wenn wir jedoch versuchen, doppelte Schlüssel zusammenzuführen, führen diese beiden Funktionen zu unterschiedlichen Ergebnissen.Beispiel 2 – Doppelte Schlüssel
Wie der Name schon sagt, der
JSON_MERGE_PRESERVE()
-Funktion behält Member mit doppelten Schlüsseln bei (hier unterscheidet sie sich vonJSON_MERGE_PATCH()
Funktion).SELECT JSON_MERGE_PRESERVE('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Ergebnis;Ergebnis:
+-----------------------------------+| Ergebnis |+-----------------------------------+| {"Name":["Bartholomäus", "Bart"]} |+---------------------------------------------- --+In diesem Fall wurde also ein Array erstellt und sowohl Bart als auch Bartholomew wurden als separate Elemente dieses Arrays hinzugefügt.
Dies steht im Gegensatz zu
JSON_MERGE_PATCH()
Funktion, die Folgendes tut:SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Ergebnis;Ergebnis:
+------------------+| Ergebnis |+------------------+| {"Name":"Bart"} |+------------------+Beispiel 3 – Mehrere Mitglieder
Hier ist ein weiteres Beispiel, aber mit einem zusätzlichen Member im Objekt:
SELECT JSON_MERGE_PRESERVE('{"Name":"Bartholomäus", "Alter":10}', '{"Name":"Bart"}') Ergebnis;Ergebnis:
+---------------------------------------------- +| Ergebnis |+----------------------------------------------+ | {"Alter":10, "Name":["Bartholomäus", "Bart"]} |+----------------------------------- -------------------+
Dies funktioniert auch umgekehrt – das Ergebnis ist dasselbe, wenn wir das zusätzliche Element zum zweiten Objekt hinzufügen.
SELECT JSON_MERGE_PRESERVE('{"Name":"Bartholomäus"}', '{"Name":"Bart", "Alter":10}') Ergebnis;
Ergebnis:
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_PRESERVE('{"Name":"Bart"}', '{"Alter":10}', '{"Haarfarbe":"Gelb"}') Ergebnis;
Ergebnis:
Beispiel 5 – Arrays
Hier ist ein Beispiel für das Zusammenführen von zwei Arrays mit demselben Namen:
SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Ergebnis;
Ergebnis:
Dies ist ein weiteres Beispiel, in dem JSON_MERGE_PATCH()
würde ein anderes Ergebnis zurückgeben.
Wenn die Arrays unterschiedliche Namen haben, werden sie natürlich als separate Arrays enden (aber innerhalb desselben JSON-Dokuments):
SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobby":["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"], "Hobbies":["Probleme"] } }';SELECT JSON_MERGE_PRESERVE(@data1, @data2) Ergebnis;
Ergebnis:
Die genauen Regeln, wie diese Funktion Zusammenführungen ausführt, finden Sie in der MySQL-Dokumentation.