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 ændre Name ind i et array, der indeholder både Bartholomew og Bart . 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.