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 fra JSON_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.