I MySQL, JSON_MERGE_PATCH()
funktionen utför en RFC 7396-kompatibel sammanslagning av två eller flera JSON-dokument, utan att bevara medlemmar som har dubbletter av nycklar.
Du tillhandahåller JSON-dokumenten som argument.
Syntax
Syntaxen ser ut så här:
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)
Där json_doc
är JSON-dokumenten som ska slås samman. Om något av dokumenten är ogiltigt uppstår ett fel.
Exempel 1 – Grundläggande användning
Här är ett exempel att visa.
SELECT JSON_MERGE_PATCH('{"Namn":"Homer"}', '{"Ålder":39}') Resultat;
Resultat:
+-------------------------------------+| Resultat |+-------------------------------------+| {"Ålder":39, "Namn":"Homer"} |+-------------------------------------+Så i det här exemplet slog vi samman två separata objekt till ett objekt.
Exempel 2 – Duplicera nycklar
Som nämnts bevarar den här funktionen inte medlemmar med dubbletter av nycklar. Exempel:
SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Resultat;Resultat:
+------------------------+| Resultat |+------------------------+| {"Name":"Bart"} |+------------------+Så i det här fallet vann Bart.
Om du behöver bevara medlemmar med dubbletter av nycklar, använd
JSON_MERGE_PRESERVE()
funktion istället. Om du använder den funktionen för det här exemplet skulleName
bli till en array som innehåller bådeBartholomew
ochBart
. Så här:SELECT JSON_MERGE_PRESERVE('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Resultat;Resultat:
+----------------------------------------+| Resultat |+-------------------------------------------+| {"Name":["Bartholomew", "Bart"]} |+---------------------------------------- --+Exempel 3 – Flera medlemmar
Här är ett annat exempel, men med en extra medlem i objektet:
SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew", "Age":10}', '{"Name":"Bart"}') Resultat;Resultat:
+-------------------------------------+| Resultat |+-------------------------------------+| {"Ålder":10, "Namn":"Bart"} |+------------------------------------+Så Bart vinner fortfarande, och han har slagits samman med de andra medlemmarna i det första objektet.
Detta fungerar naturligtvis också tvärtom – resultatet blir detsamma om vi lägger till den extra medlemmen i det andra objektet.
SELECT JSON_MERGE_PATCH('{"Name":"Bartholomew"}', '{"Name":"Bart", "Age":10}') Resultat;Resultat:
+-------------------------------------+| Resultat |+-------------------------------------+| {"Ålder":10, "Namn":"Bart"} |+------------------------------------+Exempel 4 – Fler dokument
Du är inte begränsad till att bara slå samman två dokument. Du kan slå ihop så många som behövs. Här är ett exempel på att slå samman tre objekt.
SELECT JSON_MERGE_PATCH('{"Namn":"Bart"}', '{"Ålder":10}', '{"Hårfärg":"Gul"}') Resultat;Resultat:
+------------------------------------------------------ -------+| Resultat |+------------------------------------------------------ ------+| {"Ålder":10, "Namn":"Bart", "Hårfärg":"Gul"} |+------------------------ ----------------------------+Exempel 5 – Arrayer
Att slå samman två arrayer med samma namn kommer att resultera i att endast en av dem bevaras:
SELECT JSON_MERGE_PATCH('{"Hobbies":["Problem", "Og"]}', '{"Hobbies":["Skateboardåkning"]}') Resultat;Resultat:
+--------------------------------+| Resultat |+--------------------------------+| {"Hobbyer":["Skateboardåkning"]} |+--------------------------------+Återigen kan du använda
JSON_MERGE_PRESERVE()
om du behöver bevara båda arrayerna. Så det föregående exemplet kan skrivas om till följande:SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Problem", "Og"]}", '{"Hobbies":["Skateboardåkning"]}') Resultat;Resultat:
+------------------------------------------------------ ----------+| Resultat |+------------------------------------------------------ --------+| {"Hobbies":["Problem", "Og", "Skateboardåkning"]} |+----------------------------------- --------------------------+Exempel 6 – Ett större JSON-dokument
Här är ett exempel som slår samman (något) större JSON-dokument.
SET @data1 ='{ "Suspect":{ "Name":"Bart", "Hobbies":["Skateboard", "Og"] } }', @data2 ='{ "Suspect":{ " Ålder":10, "Föräldrar":["Marge", "Homer"] } }';SELECT JSON_MERGE_PATCH(@data1, @data2) Resultat;Resultat:
+------------------------------------------------------ -------------------------------------------------- ------------------+| Resultat |+------------------------------------------------------- -------------------------------------------------- ------------------+| {"Misstänkt":{"Ålder":10, "Namn":"Bart", "Hobbyer":["Skateboard", "Osäg"], "Föräldrar":["Marge", "Homer"]}} | +------------------------------------------------ -------------------------------------------------- ----------------+För de exakta reglerna för hur den här funktionen fungerar sammanslagningar, se MySQL-dokumentationen.