V MySQL je to JSON_MERGE_PRESERVE() funkce sloučí dva nebo více dokumentů JSON a vrátí výsledek.
Jako argumenty poskytujete dokumenty JSON.
Tato funkce byla přidána do MySQL 8.0.3 jako synonymum pro JSON_MERGE() , nicméně JSON_MERGE() Funkce je nyní zastaralá a v budoucí verzi MySQL bude odstraněna.
Syntaxe
Syntaxe vypadá takto:
JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)
Kde json_doc jsou dokumenty JSON, které mají být sloučeny.
Pokud je některý z dokumentů neplatný, zobrazí se chyba.
Pokud je některý argument NULL , tato funkce vrací NULL .
Příklad 1 – Základní použití
Zde je příklad k demonstraci.
SELECT JSON_MERGE_PRESERVE('{"Jméno":"Homer"}', '{"Věk":39}') Výsledek; Výsledek:
+------------------------------+| Výsledek |+------------------------------+| {"Věk":39, "Jméno":"Homer"} |+------------------------------+
V tomto příkladu jsme tedy sloučili dva samostatné objekty do jednoho objektu.
To je přesně stejný výsledek, jaký bychom dostali, kdybychom použili JSON_MERGE_PATCH() funkce. Pokud se však pokusíme sloučit duplicitní klíče, tyto dvě funkce přinesou odlišné výsledky.
Příklad 2 – Duplicitní klíče
Jak název napovídá, JSON_MERGE_PRESERVE() funkce zachovává členy s duplicitními klíči (zde se liší od JSON_MERGE_PATCH() funkce).
SELECT JSON_MERGE_PRESERVE('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Výsledek;
Výsledek:
+-----------------------------------+| Výsledek |+-----------------------------------+| {"Jméno":["Bartholomew", "Bart"]} |+--------------------------------- --+
Takže v tomto případě bylo vytvořeno pole a Bart i Bartoloměj byli přidáni jako samostatné prvky tohoto pole.
To je v kontrastu s JSON_MERGE_PATCH() funkce, která dělá následující:
SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Výsledek;
Výsledek:
+-------------------+| Výsledek |+------------------+| {"Jméno":"Bart"} |+------------------+ Příklad 3 – Více členů
Zde je další příklad, ale s dalším členem v objektu:
SELECT JSON_MERGE_PRESERVE('{"Jméno":"Bartoloměj", "Věk":10}', '{"Jméno":"Bart"}') Výsledek;
Výsledek:
+---------------------------------------------- +| Výsledek |+----------------------------------------------+ | {"Věk":10, "Jméno":["Bartholomew", "Bart"]} |+---------------------------- -------------------+
Funguje to i obráceně – výsledek je stejný, pokud přidáme další člen k druhému objektu.
SELECT JSON_MERGE_PRESERVE('{"Jméno":"Bartholomew"}', '{"Jméno":"Bart", "Věk":10}') Výsledek;
Výsledek:
+---------------------------------------------- +| Výsledek |+----------------------------------------------+ | {"Věk":10, "Jméno":["Bartholomew", "Bart"]} |+---------------------------- -------------------+ Příklad 4 – Další dokumenty
Nejste omezeni na sloučení pouze dvou dokumentů. Můžete sloučit tolik, kolik potřebujete. Zde je příklad sloučení tří objektů.
SELECT JSON_MERGE_PRESERVE('{"Jméno":"Bart"}', '{"Věk":10}', '{"Barva vlasů":"Yellow"}') Výsledek;
Výsledek:
+---------------------------------------------- -------+| Výsledek |+----------------------------------------------- ------+| {"Věk":10, "Jméno":"Bart", "Barva vlasů":"Žlutá"} |+------------------------ -----------------------------+ Příklad 5 – Pole
Zde je příklad sloučení dvou polí se stejným názvem:
SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Výsledek;
Výsledek:
+---------------------------------------------- ---------+| Výsledek |+----------------------------------------------- --------+| {"Hobby":["Trouble", "Neplechy", "Skateboarding"]} |+----------------------------- --------------------------+
Toto je další příklad JSON_MERGE_PATCH() vrátí jiný výsledek.
Je zřejmé, že pokud mají pole různé názvy, skončí jako samostatná pole (ale ve stejném dokumentu JSON):
SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Neplechy"]}', '{"Hobby":["Skateboarding"]}') Výsledek;
Výsledek:
+---------------------------------------------- ---------------------+| Výsledek |+----------------------------------------------- -------------------+| {"Hobby":["Skateboarding"], "Hobbies":["Trouble", "Neplechy"]} |+------------------------ -------------------------------------------+ Příklad 6 – Větší dokument JSON
Zde je příklad, který sloučí (trochu) větší dokumenty JSON.
SET @data1 ='{ "Podezřelý":{ "Jméno":"Bart", "Hobby":["Skateboarding", "Nešlechetnost"] } }', @data2 ='{ "Podezřelý":{ " Věk":10, "Rodiče":["Marge", "Homer"], "Hobby":["Trouble"] } }';SELECT JSON_MERGE_PRESERVE(@data1, @data2) Výsledek;
Výsledek:
+---------------------------------------------- -------------------------------------------------- ------------------------------+| Výsledek |+----------------------------------------------- -------------------------------------------------- -----------------------------+| {"Podezřelý":{"Věk":10, "Jméno":"Bart", "Hobby":["Skateboarding", "Neplechy", "Trouble"], "Rodiče":["Marge", "Homer" ]}} |+--------------------------------------------- -------------------------------------------------- -------------------------------+
Přesná pravidla, jak tato funkce provádí sloučení, naleznete v dokumentaci MySQL.