I MySQL er JSON_MERGE_PRESERVE()
funktion slår to eller flere JSON-dokumenter sammen og returnerer resultatet.
Du leverer JSON-dokumenterne som argumenter.
Denne funktion blev tilføjet i MySQL 8.0.3 som et synonym for JSON_MERGE()
, dog JSON_MERGE()
Funktionen er nu forældet og kan fjernes i en fremtidig udgivelse af MySQL.
Syntaks
Syntaksen ser sådan ud:
JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)
Hvor json_doc
er JSON-dokumenterne, der skal flettes.
Hvis nogle af dokumenterne er ugyldige, opstår der en fejl.
Hvis et argument er NULL
, returnerer denne funktion NULL
.
Eksempel 1 – Grundlæggende brug
Her er et eksempel til at demonstrere.
SELECT JSON_MERGE_PRESERVE('{"Navn":"Homer"}', '{"Alder":39}') Resultat;
Resultat:
+--------------------------------------+| Resultat |+-------------------------------------+| {"Alder":39, "Navn":"Homer"} |+------------------------------------+Så i dette eksempel flettede vi to separate objekter til ét objekt.
Dette er nøjagtig det samme resultat, som vi ville få, hvis vi brugte
JSON_MERGE_PATCH()
fungere. Men hvis vi forsøger at flette dublerede nøgler, vil disse to funktioner give forskellige resultater.Eksempel 2 – Dubletnøgler
Som navnet antyder, er
JSON_MERGE_PRESERVE()
funktion bevarer medlemmer med dublerede nøgler (det er her, den adskiller sig fraJSON_MERGE_PATCH()
funktion).SELECT JSON_MERGE_PRESERVE('{"Navn":"Bartholomew"}', '{"Navn":"Bart"}') Resultat;Resultat:
+----------------------------------------+| Resultat |+-------------------------------------------+| {"Navn":["Bartholomew", "Bart"]} |+---------------------------------------- --+Så i dette tilfælde blev der oprettet et array, og både Bart og Bartholomew blev tilføjet som separate elementer i det array.
Dette er i modsætning til
JSON_MERGE_PATCH()
funktion, som gør følgende:SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Resultat;Resultat:
+------------------------+| Resultat |+------------------------+| {"Name":"Bart"} |+------------------------+Eksempel 3 – Flere medlemmer
Her er et andet eksempel, men med et ekstra medlem i objektet:
SELECT JSON_MERGE_PRESERVE('{"Navn":"Bartholomew", "Alder":10}', '{"Navn":"Bart"}') Resultat;Resultat:
+---------------------------------------------- +| Resultat |+------------------------------------------------------+ | {"Alder":10, "Navn":["Bartholomew", "Bart"]} |+-------------------------------- -------------------+Dette fungerer også omvendt – resultatet er det samme, hvis vi tilføjer det ekstra element til det andet objekt.
SELECT JSON_MERGE_PRESERVE('{"Navn":"Bartholomew"}', '{"Navn":"Bart", "Alder":10}') Resultat;Resultat:
+---------------------------------------------- +| Resultat |+------------------------------------------------------+ | {"Alder":10, "Navn":["Bartholomew", "Bart"]} |+-------------------------------- -------------------+Eksempel 4 – Flere dokumenter
Du er ikke begrænset til kun at flette to dokumenter. Du kan flette så mange som nødvendigt. Her er et eksempel på sammenlægning af tre objekter.
SELECT JSON_MERGE_PRESERVE('{"Navn":"Bart"}', '{"Alder":10}', '{"Hårfarve":"Gul"}') Resultat;Resultat:
+---------------------------------------------- -------+| Resultat |+----------------------------------------------- ------+| {"Alder":10, "Navn":"Bart", "Hårfarve":"Gul"} |+------------------------ ----------------------------+Eksempel 5 – Arrays
Her er et eksempel på sammenlægning af to arrays med samme navn:
SELECT JSON_MERGE_PRESERVE('{"Hobbyer":["Problemer", "Ulykke"]}', '{"Hobbyer":["Skateboarding"]}') Resultat;Resultat:
+------------------------------------------------------ ----------+| Resultat |+----------------------------------------------- --------+| {"Hobbyer":["Problemer", "Ulykke", "Skateboarding"]} |+----------------------------- --------------------------+Dette er endnu et eksempel, hvor
JSON_MERGE_PATCH()
ville returnere et andet resultat.Det er klart, at hvis arrays har forskellige navne, ender de som separate arrays (men inden for det samme JSON-dokument):
SELECT JSON_MERGE_PRESERVE('{"Hobbyer":["Problemer", "Ulykke"]}', '{"Hobby":["Skateboarding"]}') Resultat;Resultat:
+---------------------------------------------- --------------------+| Resultat |+----------------------------------------------- -------------------+| {"Hobby":["Skateboarding"], "Hobbyer":["Problemer", "Ulykke"]} |+----------------------- --------------------------------------------------+Eksempel 6 – Et større JSON-dokument
Her er et eksempel, der fletter (lidt) større JSON-dokumenter.
SET @data1 ='{ "Mistænkt":{ "Navn":"Bart", "Hobbyer":["Skateboarding", "Mischief"] } }', @data2 ='{ "Mistænkt":{ " Alder":10, "Forældre":["Marge", "Homer"], "Hobbyer":["Problemer"] } }';SELECT JSON_MERGE_PRESERVE(@data1, @data2) Resultat;Resultat:
+---------------------------------------------- -------------------------------------------------- ------------------------------------+| Resultat |+------------------------------------------------------ -------------------------------------------------- ----------------------------+| {"Mistænkt":{"Alder":10, "Navn":"Bart", "Hobbyer":["Skateboarding", "Mischief", "Trouble"], "Forældre":["Marge", "Homer" ]}} |+--------------------------------------------- -------------------------------------------------- ------------------------------------+For de nøjagtige regler for, hvordan denne funktion udfører fletninger, se MySQL-dokumentationen.