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

JSON_MERGE_PATCH() – Proveďte sloučení dokumentů JSON v MySQL v souladu s RFC 7396

V MySQL je to JSON_MERGE_PATCH() Funkce provede sloučení dvou nebo více dokumentů JSON v souladu s RFC 7396 bez zachování členů s duplicitními klíči.

Jako argumenty poskytujete dokumenty JSON.

Syntaxe

Syntaxe vypadá takto:

JSON_MERGE_PATCH(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.

Příklad 1 – Základní použití

Zde je příklad k demonstraci.

SELECT JSON_MERGE_PATCH('{"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.

Příklad 2 – Duplicitní klíče

Jak již bylo zmíněno, tato funkce nezachovává členy s duplicitními klíči. Příklad:

SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Výsledek;

Výsledek:

+-------------------+| Výsledek |+------------------+| {"Jméno":"Bart"} |+------------------+

Takže v tomto případě vyhrál Bart.

Pokud potřebujete zachovat členy s duplicitními klíči, použijte JSON_MERGE_PRESERVE() místo toho funkci. Použití této funkce v tomto příkladu by změnilo Name do pole obsahujícího jak Bartholomew a Bart . Takhle:

SELECT JSON_MERGE_PRESERVE('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Výsledek;

Výsledek:

+-----------------------------------+| Výsledek |+-----------------------------------+| {"Jméno":["Bartholomew", "Bart"]} |+--------------------------------- --+

Příklad 3 – Více členů

Zde je další příklad, ale s dalším členem v objektu:

SELECT JSON_MERGE_PATCH('{"Jméno":"Bartoloměj", "Věk":10}', '{"Jméno":"Bart"}') Výsledek;

Výsledek:

+-----------------------------+| Výsledek |+-----------------------------+| {"Věk":10, "Jméno":"Bart"} |+-----------------------------+

Takže Bart stále vyhrává a byl sloučen s ostatními členy prvního objektu.

Samozřejmě to funguje i opačně – výsledek je stejný, pokud přidáme další člen k druhému objektu.

SELECT JSON_MERGE_PATCH('{"Jméno":"Bartholomew"}', '{"Jméno":"Bart", "Věk":10}') Výsledek;

Výsledek:

+-----------------------------+| Výsledek |+-----------------------------+| {"Věk":10, "Jméno":"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_PATCH('{"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

Sloučení dvou polí se stejným názvem bude mít za následek zachování pouze jednoho z nich:

SELECT JSON_MERGE_PATCH('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Výsledek;

Výsledek:

+--------------------------------+| Výsledek |+--------------------------------+| {"Hobby":["Skateboarding"]} |+--------------------------------+

Opět můžete použít JSON_MERGE_PRESERVE() pokud potřebujete zachovat obě pole. Takže předchozí příklad lze přepsat na následující:

SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Výsledek;

Výsledek:

+---------------------------------------------- ---------+| Výsledek |+----------------------------------------------- --------+| {"Hobby":["Trouble", "Neplechy", "Skateboarding"]} |+----------------------------- --------------------------+

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"] } }';SELECT JSON_MERGE_PATCH(@data1, @data2) Výsledek;

Výsledek:

+---------------------------------------------- -------------------------------------------------- --------------------+| Výsledek |+----------------------------------------------- -------------------------------------------------- ------------------+| {"Podezřelý":{"Věk":10, "Jméno":"Bart", "Hobby":["Skateboarding", "Neplechy"], "Rodiče":["Marge", "Homer"]}} | +-------------------------------------------------- -------------------------------------------------- ----------------+

Přesná pravidla, jak tato funkce provádí sloučení, naleznete v dokumentaci MySQL.


  1. Použijte COL_LENGTH() k získání délky sloupce na serveru SQL

  2. Jak importovat databázi pomocí phpMyAdmin

  3. Jak získat informace o typu definovaném uživatelem?

  4. Ukládání dat XML na SQL Server