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

JSON_MERGE_PRESERVE() – Flet flere JSON-dokumenter i MySQL

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.


  1. Oplysninger om informationsskema-databasen i MySQL

  2. Bash-script til at indsætte værdier i MySQL

  3. Få tabel og kolonne, der ejer en sekvens

  4. SQLite JSON_GROUP_ARRAY()