sql >> Databasteknik >  >> RDS >> Mysql

JSON_MERGE_PATCH() – Utför en RFC 7396-kompatibel sammanslagning av JSON-dokument i MySQL

I MySQL, JSON_MERGE_PATCH() funktionen utför en RFC 7396-kompatibel sammanslagning av två eller flera JSON-dokument, utan att bevara medlemmar som har dubbletter av nycklar.

Du tillhandahåller JSON-dokumenten som argument.

Syntax

Syntaxen ser ut så här:

JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)

Där json_doc är JSON-dokumenten som ska slås samman. Om något av dokumenten är ogiltigt uppstår ett fel.

Exempel 1 – Grundläggande användning

Här är ett exempel att visa.

SELECT JSON_MERGE_PATCH('{"Namn":"Homer"}', '{"Ålder":39}') Resultat;

Resultat:

+-------------------------------------+| Resultat |+-------------------------------------+| {"Ålder":39, "Namn":"Homer"} |+-------------------------------------+ 

Så i det här exemplet slog vi samman två separata objekt till ett objekt.

Exempel 2 – Duplicera nycklar

Som nämnts bevarar den här funktionen inte medlemmar med dubbletter av nycklar. Exempel:

SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Resultat;

Resultat:

+------------------------+| Resultat |+------------------------+| {"Name":"Bart"} |+------------------+

Så i det här fallet vann Bart.

Om du behöver bevara medlemmar med dubbletter av nycklar, använd JSON_MERGE_PRESERVE() funktion istället. Om du använder den funktionen för det här exemplet skulle Name bli till en array som innehåller både Bartholomew och Bart . Så här:

SELECT JSON_MERGE_PRESERVE('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Resultat;

Resultat:

+----------------------------------------+| Resultat |+-------------------------------------------+| {"Name":["Bartholomew", "Bart"]} |+---------------------------------------- --+

Exempel 3 – Flera medlemmar

Här är ett annat exempel, men med en extra medlem i objektet:

SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew", "Age":10}', '{"Name":"Bart"}') Resultat;

Resultat:

+-------------------------------------+| Resultat |+-------------------------------------+| {"Ålder":10, "Namn":"Bart"} |+------------------------------------+

Så Bart vinner fortfarande, och han har slagits samman med de andra medlemmarna i det första objektet.

Detta fungerar naturligtvis också tvärtom – resultatet blir detsamma om vi lägger till den extra medlemmen i det andra objektet.

SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart", "Age":10}') Resultat;

Resultat:

+-------------------------------------+| Resultat |+-------------------------------------+| {"Ålder":10, "Namn":"Bart"} |+------------------------------------+

Exempel 4 – Fler dokument

Du är inte begränsad till att bara slå samman två dokument. Du kan slå ihop så många som behövs. Här är ett exempel på att slå samman tre objekt.

SELECT JSON_MERGE_PATCH('{"Namn":"Bart"}', '{"Ålder":10}', '{"Hårfärg":"Gul"}') Resultat;

Resultat:

+------------------------------------------------------ -------+| Resultat |+------------------------------------------------------ ------+| {"Ålder":10, "Namn":"Bart", "Hårfärg":"Gul"} |+------------------------ ----------------------------+

Exempel 5 – Arrayer

Att slå samman två arrayer med samma namn kommer att resultera i att endast en av dem bevaras:

SELECT JSON_MERGE_PATCH('{"Hobbies":["Problem", "Og"]}', '{"Hobbies":["Skateboardåkning"]}') Resultat;

Resultat:

+--------------------------------+| Resultat |+--------------------------------+| {"Hobbyer":["Skateboardåkning"]} |+--------------------------------+

Återigen kan du använda JSON_MERGE_PRESERVE() om du behöver bevara båda arrayerna. Så det föregående exemplet kan skrivas om till följande:

SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Problem", "Og"]}", '{"Hobbies":["Skateboardåkning"]}') Resultat;

Resultat:

+------------------------------------------------------ ----------+| Resultat |+------------------------------------------------------ --------+| {"Hobbies":["Problem", "Og", "Skateboardåkning"]} |+----------------------------------- --------------------------+

Exempel 6 – Ett större JSON-dokument

Här är ett exempel som slår samman (något) större JSON-dokument.

SET @data1 ='{ "Suspect":{ "Name":"Bart", "Hobbies":["Skateboard", "Og"] } }', @data2 ='{ "Suspect":{ " Ålder":10, "Föräldrar":["Marge", "Homer"] } }';SELECT JSON_MERGE_PATCH(@data1, @data2) Resultat;

Resultat:

+------------------------------------------------------ -------------------------------------------------- ------------------+| Resultat |+------------------------------------------------------- -------------------------------------------------- ------------------+| {"Misstänkt":{"Ålder":10, "Namn":"Bart", "Hobbyer":["Skateboard", "Osäg"], "Föräldrar":["Marge", "Homer"]}} | +------------------------------------------------ -------------------------------------------------- ----------------+

För de exakta reglerna för hur den här funktionen fungerar sammanslagningar, se MySQL-dokumentationen.


  1. hur man delar strängen i olika kolumner?

  2. Komprimera en specifik partition i en tabell i SQL Server (T-SQL)

  3. hur infogar man datum och tid i Oracle?

  4. Vad motsvarar LISTAGG (Oracle-databas) i PostgreSQL?