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

JSON_MERGE_PRESERVE() – Mehrere JSON-Dokumente in MySQL zusammenführen

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 von JSON_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:

+---------------------------------------------- +| Ergebnis |+----------------------------------------------+ | {"Alter":10, "Name":["Bartholomäus", "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_PRESERVE('{"Name":"Bart"}', '{"Alter":10}', '{"Haarfarbe":"Gelb"}') Ergebnis;

Ergebnis:

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

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:

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

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:

+---------------------------------------------- --------------------+| Ergebnis |+------------------------------------------------------------ -------------------+| {"Hobby":["Skateboarding"], "Hobbys":["Ärger", "Unfug"]} |+----------------------- -------------------------------------------+

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:

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

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