In MySQL, de JSON_MERGE_PATCH()
functie voert een RFC 7396-compatibele samenvoeging uit van twee of meer JSON-documenten, zonder dat leden dubbele sleutels behouden.
U levert de JSON-documenten als argumenten.
Syntaxis
De syntaxis gaat als volgt:
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)
Waar json_doc
zijn de JSON-documenten die moeten worden samengevoegd. Als een van de documenten ongeldig is, wordt er een fout gegenereerd.
Voorbeeld 1 – Basisgebruik
Hier is een voorbeeld om te demonstreren.
SELECT JSON_MERGE_PATCH('{"Name": "Homer"}', '{"Age": 39}') Result;
Resultaat:
+------------------------------+ | Result | +------------------------------+ | {"Age": 39, "Name": "Homer"} | +------------------------------+
Dus in dit voorbeeld hebben we twee afzonderlijke objecten samengevoegd tot één object.
Voorbeeld 2 – Dubbele sleutels
Zoals vermeld, bewaart deze functie geen leden met dubbele sleutels. Voorbeeld:
SELECT JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
Resultaat:
+------------------+ | Result | +------------------+ | {"Name": "Bart"} | +------------------+
Dus in dit geval heeft Bart gewonnen.
Als u leden met dubbele sleutels wilt behouden, gebruikt u de JSON_MERGE_PRESERVE()
in plaats daarvan functioneren. Het gebruik van die functie voor dit voorbeeld zou Name
. veranderen in een array met zowel Bartholomew
en Bart
. Zoals dit:
SELECT JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
Resultaat:
+-----------------------------------+ | Result | +-----------------------------------+ | {"Name": ["Bartholomew", "Bart"]} | +-----------------------------------+
Voorbeeld 3 – Meerdere leden
Hier is nog een voorbeeld, maar met een extra lid in het object:
SELECT JSON_MERGE_PATCH('{"Name": "Bartholomew", "Age": 10}', '{"Name": "Bart"}') Result;
Resultaat:
+-----------------------------+ | Result | +-----------------------------+ | {"Age": 10, "Name": "Bart"} | +-----------------------------+
Dus Bart wint nog steeds, en hij is samengevoegd met de andere leden van het eerste object.
Dit werkt natuurlijk ook andersom:het resultaat is hetzelfde als we het extra lid aan het tweede object toevoegen.
SELECT JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart", "Age": 10}') Result;
Resultaat:
+-----------------------------+ | Result | +-----------------------------+ | {"Age": 10, "Name": "Bart"} | +-----------------------------+
Voorbeeld 4 – Meer documenten
U bent niet beperkt tot het samenvoegen van slechts twee documenten. U kunt er zoveel samenvoegen als nodig is. Hier is een voorbeeld van het samenvoegen van drie objecten.
SELECT JSON_MERGE_PATCH('{"Name": "Bart"}', '{"Age": 10}', '{"Hair Color": "Yellow"}') Result;
Resultaat:
+-----------------------------------------------------+ | Result | +-----------------------------------------------------+ | {"Age": 10, "Name": "Bart", "Hair Color": "Yellow"} | +-----------------------------------------------------+
Voorbeeld 5 – Arrays
Als u twee arrays met dezelfde naam samenvoegt, wordt er slechts één bewaard:
SELECT JSON_MERGE_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;
Resultaat:
+--------------------------------+ | Result | +--------------------------------+ | {"Hobbies": ["Skateboarding"]} | +--------------------------------+
Nogmaals, je kunt JSON_MERGE_PRESERVE()
. gebruiken als u beide arrays wilt behouden. Dus het vorige voorbeeld kan worden herschreven tot het volgende:
SELECT JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;
Resultaat:
+-------------------------------------------------------+ | Result | +-------------------------------------------------------+ | {"Hobbies": ["Trouble", "Mischief", "Skateboarding"]} | +-------------------------------------------------------+
Voorbeeld 6 – Een groter JSON-document
Hier is een voorbeeld dat (iets) grotere JSON-documenten samenvoegt.
SET @data1 = '{ "Suspect": { "Name": "Bart", "Hobbies": ["Skateboarding", "Mischief"] } }', @data2 = '{ "Suspect": { "Age": 10, "Parents": ["Marge", "Homer"] } }'; SELECT JSON_MERGE_PATCH(@data1, @data2) Result;
Resultaat:
+-------------------------------------------------------------------------------------------------------------------+ | Result | +-------------------------------------------------------------------------------------------------------------------+ | {"Suspect": {"Age": 10, "Name": "Bart", "Hobbies": ["Skateboarding", "Mischief"], "Parents": ["Marge", "Homer"]}} | +-------------------------------------------------------------------------------------------------------------------+
Voor de exacte regels voor hoe deze functie samenvoegingen uitvoert, zie de MySQL-documentatie.