In MySQL is de JSON_SET()
functie voegt waarden in of werkt deze bij in een JSON-document en retourneert het resultaat.
U geeft het JSON-document op als het eerste argument, gevolgd door het pad waarin moet worden ingevoegd, gevolgd door de waarde die moet worden ingevoegd. U kunt meerdere pad/waarde-paren opgeven als u meerdere waarden moet bijwerken.
Syntaxis
De syntaxis gaat als volgt:
JSON_SET(json_doc, path, val[, path, val] ...)
Waar:
json_doc
is het JSON-document.path
is het pad van het element waarvoor u gegevens wilt invoegen of de waarde wilt bijwerken.val
is de nieuwe waarde.
De pad-waardeparen worden van links naar rechts geëvalueerd. Het document dat wordt geproduceerd door een paar te evalueren, wordt de nieuwe waarde waartegen het volgende paar wordt geëvalueerd.
Er treedt een fout op als het eerste argument geen geldig JSON-document is, of als een padargument geen geldige paduitdrukking is of een *
bevat of **
jokerteken.
Voorbeeld 1 – Voer een waarde in
Hier is een voorbeeld om te demonstreren hoe u een waarde invoegt met deze functie.
SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Resultaat:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
In dit geval wordt het derde argument op het opgegeven pad in de array ingevoegd. Ik gebruik $.c
voor het pad en 3
voor de in te voegen waarde. Dit resulteert in een sleutel/waarde-paar van "c": 3
.
Hier is nog een voorbeeld:
SELECT JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
Resultaat:
+------------------------------------------------+ | Result | +------------------------------------------------+ | {"Age": 39, "Name": "Homer", "Gender": "Male"} | +------------------------------------------------+
Voorbeeld 2 – Een waarde bijwerken
In het vorige voorbeeld is een waarde ingevoegd. Dit voorbeeld werkt een bestaande waarde bij.
SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Resultaat:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
Hier is nog een voorbeeld:
SELECT JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
Resultaat:
+------------------------------------+ | Result | +------------------------------------+ | {"Name": "Bart", "Gender": "Male"} | +------------------------------------+
Voorbeeld 3 – Arrays
U kunt waarden in een array invoegen door een pad te gebruiken voorbij het einde van de bestaande array. Voorbeeld:
SELECT JSON_SET('[1, 2, 3]', '$[3]', 4) AS 'Result';
Resultaat:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
Als u echter een pad gebruikt dat al in de array bestaat, wordt de waarde bijgewerkt:
SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) AS 'Result';
Resultaat:
+-----------+ | Result | +-----------+ | [1, 4, 3] | +-----------+
Als de bestaande waarde geen array is, wordt deze automatisch verpakt als een array en vervolgens uitgebreid met de nieuwe waarde. Voorbeeld:
SELECT JSON_SET('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
Resultaat:
+-----------------------+ | Result | +-----------------------+ | [{"a": 1, "b": 2}, 3] | +-----------------------+
Voorbeeld 4 – Meerdere waarden
U kunt meerdere waarden tegelijk invoegen/bijwerken. Voeg eenvoudig elk sleutel/waarde-paar toe, gescheiden door een komma. Voorbeeld:
SELECT JSON_SET('{"a": 1, "b": 2, "c": 3}', '$.a', 9, '$.c', 'Bart') AS 'Result';
Resultaat:
+-------------------------------+ | Result | +-------------------------------+ | {"a": 9, "b": 2, "c": "Bart"} | +-------------------------------+
Voorbeeld 5 – Een groter JSON-document
Hier is een voorbeeld met een (iets) groter JSON-document.
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_SET(@data, '$.Person.Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Result';
Resultaat:
+-----------------------------------------------------------------+ | Result | +-----------------------------------------------------------------+ | {"Person": {"Name": "Bart", "Hobbies": ["Eating", "Mischief"]}} | +-----------------------------------------------------------------+
Zie ook JSON_INSERT()
voor het invoegen van waarden zonder bestaande waarden te vervangen, en JSON_REPLACE()
voor het vervangen van alleen bestaande waarden.