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ånJSON_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.