sql >> Database teknologi >  >> RDS >> Mysql

JSON_MERGE_PATCH() – Udfør en RFC 7396-kompatibel fletning af JSON-dokumenter i MySQL

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.


  1. Hvordan tilføjes en ny kolonne til MYSQL-tabellen?

  2. Implementering af en meget tilgængelig Nextcloud med MySQL Galera Cluster og GlusterFS

  3. Hvad er fordelen ved at bruge SET XACT_ABORT ON i en lagret procedure?

  4. Kan ikke bruge tabellen med navnet bruger i postgresql hibernate