sql >> Databáze >  >> RDS >> Mysql

JSON_MERGE_PRESERVE() – Sloučit více dokumentů JSON v MySQL

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.


  1. Příklad Oracle WHILE LOOP

  2. Operační analýza v reálném čase a index úložiště neshlukovaných sloupců

  3. Jak vytvořit histogram v PostgreSQL

  4. Jak PLAY_SOUND v Oracle Forms