sql >> Databasteknik >  >> RDS >> Mysql

JSON_MERGE_PRESERVE() – Slå samman flera JSON-dokument i MySQL

I MySQL, JSON_MERGE_PRESERVE() funktion slår samman två eller flera JSON-dokument och returnerar resultatet.

Du tillhandahåller JSON-dokumenten som argument.

Denna funktion lades till i MySQL 8.0.3 som en synonym för JSON_MERGE() , dock JSON_MERGE() Funktionen är nu utfasad och kan tas bort i en framtida version av MySQL.

Syntax

Syntaxen ser ut så här:

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

Om något argument är NULL , returnerar denna funktion NULL .

Exempel 1 – Grundläggande användning

Här är ett exempel att visa.

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

Det här är exakt samma resultat som vi skulle få om vi använde JSON_MERGE_PATCH() fungera. Men om vi försöker slå samman dubbletter av nycklar kommer dessa två funktioner att ge olika resultat.

Exempel 2 – Duplicera nycklar

Som namnet antyder, JSON_MERGE_PRESERVE() funktionen bevarar medlemmar med dubbletter av nycklar (det är här den skiljer sig från JSON_MERGE_PATCH() funktion).

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

Resultat:

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

Så i det här fallet skapades en array och både Bart och Bartholomew lades till som separata element i den arrayen.

Detta är i motsats till JSON_MERGE_PATCH() funktion, som gör följande:

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

Resultat:

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

Exempel 3 – Flera medlemmar

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

SELECT JSON_MERGE_PRESERVE('{"Namn":"Bartholomew", "Ålder":10}', '{"Namn":"Bart"}') Resultat;

Resultat:

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

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

SELECT JSON_MERGE_PRESERVE('{"Namn":"Bartholomew"}', '{"Namn":"Bart", "Ålder":10}') Resultat;

Resultat:

+------------------------------------------------------ +| Resultat |+-------------------------------------------------------------+ | {"Ålder":10, "Namn":["Bartholomew", "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_PRESERVE('{"Namn":"Bart"}', '{"Ålder":10}', '{"Hårfärg":"Gul"}') Resultat;

Resultat:

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

Exempel 5 – Arrayer

Här är ett exempel på att slå samman två arrayer med samma namn:

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

Resultat:

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

Detta är ett annat exempel där JSON_MERGE_PATCH() skulle returnera ett annat resultat.

Uppenbarligen, om arrayerna har olika namn, kommer de att sluta som separata arrayer (men inom samma JSON-dokument):

SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Og"]}', '{"Hobby":["Skateboarding"]}') Resultat;

Resultat:

+------------------------------------------------------ --------------------+| Resultat |+------------------------------------------------------- ------------------+| {"Hobby":["Skateboardåkning"], "Hobbyer":["Problem", "Otyg"]} |+------------------------------ --------------------------------------------------+

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":{ " Age":10, "Prents":["Marge", "Homer"], "Hobbies":["Trouble"] } }';SELECT JSON_MERGE_PRESERVE(@data1, @data2) Resultat;

Resultat:

+------------------------------------------------------ -------------------------------------------------- ------------------------------------+| Resultat |+------------------------------------------------------- -------------------------------------------------- ----------------------------+| {"Suspect":{"Age":10, "Name":"Bart", "Hobbies":["Skateboard", "Og", "Trouble"], "Prents":["Marge", "Homer" ]}} |+--------------------------------------------- -------------------------------------------------- ------------------------------------+

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


  1. Hur söker man efter ett specifikt värde i alla tabeller (PostgreSQL)?

  2. MAX() – Hitta det maximala värdet i en kolumn i MySQL

  3. 6 problemfrågor som kraftigt saktar ner din databas

  4. Kapslade klasser - CustomRowMapper !! Inget problem längre!! - Del 1