I MySQL er JSON_MERGE_PATCH()
funktion udfører en RFC 7396-kompatibel fletning af to eller flere JSON-dokumenter uden at bevare medlemmer, der har dubletnøgler.
Du leverer JSON-dokumenterne som argumenter.
Syntaks
Syntaksen ser sådan ud:
JSON_MERGE_PATCH(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.
Eksempel 1 – Grundlæggende brug
Her er et eksempel til at demonstrere.
SELECT JSON_MERGE_PATCH('{"Navn":"Homer"}', '{"Alder":39}') Resultat;
Resultat:
+--------------------------------------+| Resultat |+-------------------------------------+| {"Alder":39, "Navn":"Homer"} |+------------------------------------+Så i dette eksempel flettede vi to separate objekter til ét objekt.
Eksempel 2 – Dubletnøgler
Som nævnt bevarer denne funktion ikke medlemmer med dublerede nøgler. Eksempel:
SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Resultat;Resultat:
+------------------------+| Resultat |+------------------------+| {"Name":"Bart"} |+------------------------+Så i dette tilfælde vandt Bart.
Hvis du har brug for at bevare medlemmer med dublerede nøgler, skal du bruge
JSON_MERGE_PRESERVE()
funktion i stedet for. Brug af denne funktion til dette eksempel ville ændreName
ind i et array, der indeholder bådeBartholomew
ogBart
. Sådan:SELECT JSON_MERGE_PRESERVE('{"Navn":"Bartholomew"}', '{"Navn":"Bart"}') Resultat;Resultat:
+----------------------------------------+| Resultat |+-------------------------------------------+| {"Navn":["Bartholomew", "Bart"]} |+---------------------------------------- --+Eksempel 3 – Flere medlemmer
Her er et andet eksempel, men med et ekstra medlem i objektet:
SELECT JSON_MERGE_PATCH('{"Navn":"Bartholomew", "Alder":10}', '{"Navn":"Bart"}') Resultat;Resultat:
+-------------------------------------+| Resultat |+-------------------------------------+| {"Alder":10, "Navn":"Bart"} |+-----------------------------------+Så Bart vinder stadig, og han er blevet slået sammen med de andre medlemmer af det første objekt.
Dette fungerer selvfølgelig også omvendt – resultatet er det samme, hvis vi tilføjer det ekstra element til det andet objekt.
SELECT JSON_MERGE_PATCH('{"Navn":"Bartholomew"}', '{"Navn":"Bart", "Alder":10}') Resultat;Resultat:
+-------------------------------------+| Resultat |+-------------------------------------+| {"Alder":10, "Navn":"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_PATCH('{"Navn":"Bart"}', '{"Alder":10}', '{"Hårfarve":"Gul"}') Resultat;Resultat:
+---------------------------------------------- -------+| Resultat |+----------------------------------------------- ------+| {"Alder":10, "Navn":"Bart", "Hårfarve":"Gul"} |+------------------------ ----------------------------+Eksempel 5 – Arrays
Sammenlægning af to arrays af samme navn vil resultere i, at kun én af dem bevares:
SELECT JSON_MERGE_PATCH('{"Hobbyer":["Problemer", "Ulykke"]}', '{"Hobbyer":["Skateboarding"]}') Resultat;Resultat:
+--------------------------------+| Resultat |+--------------------------------+| {"Hobbyer":["Skateboarding"]} |+----------------------------------------+Igen kan du bruge
JSON_MERGE_PRESERVE()
hvis du har brug for at bevare begge arrays. Så det forrige eksempel kan omskrives til følgende:SELECT JSON_MERGE_PRESERVE('{"Hobbyer":["Problemer", "Ulykke"]}', '{"Hobbyer":["Skateboarding"]}') Resultat;Resultat:
+------------------------------------------------------ ----------+| Resultat |+----------------------------------------------- --------+| {"Hobbyer":["Problemer", "Ulykke", "Skateboarding"]} |+----------------------------- --------------------------+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"] } }';SELECT JSON_MERGE_PATCH(@data1, @data2) Resultat;Resultat:
+------------------------------------------------------ -------------------------------------------------- ------------------+| Resultat |+------------------------------------------------------ -------------------------------------------------- ------------------+| {"Mistænkt":{"Alder":10, "Navn":"Bart", "Hobbyer":["Skateboarding", "Fortræd"], "Forældre":["Marge", "Homer"]}} | +------------------------------------------------ -------------------------------------------------- ----------------+For de nøjagtige regler for, hvordan denne funktion udfører fletninger, se MySQL-dokumentationen.