In MySQL is de JSON_INSERT()
functie voegt een waarde in een JSON-document in 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.
Syntaxis
De syntaxis gaat als volgt:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Waar:
json_doc
is het JSON-document.path
is het pad van het element waarvoor de nieuwe waarde moet worden ingevoegd.val
is de nieuwe waarde die wordt ingevoegd.
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.
Voorbeeld 1 – Basisgebruik
Hier is een voorbeeld om te demonstreren.
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Resultaat:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
Dus het derde argument wordt ingevoegd in de array op het opgegeven pad. In dit geval gebruik ik $.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_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
Resultaat:
+------------------------------------------------+ | Result | +------------------------------------------------+ | {"Age": 39, "Name": "Homer", "Gender": "Male"} | +------------------------------------------------+
Voorbeeld 2 – Een bestaand pad proberen te overschrijven
Een pad-waardepaar voor een bestaand pad in het document wordt genegeerd en overschrijft de bestaande documentwaarde niet.
Dus als we het vorige voorbeeld wijzigen om een waarde in te voegen bij Name
(die al bestaat), vindt er geen invoeging plaats:
SELECT JSON_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
Resultaat:
+-------------------------------------+ | Result | +-------------------------------------+ | {"Name": "Homer", "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_INSERT('[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, blijft de array ongewijzigd:
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';
Resultaat:
+-----------+ | Result | +-----------+ | [1, 2, 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_INSERT('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
Resultaat:
+-----------------------+ | Result | +-----------------------+ | [{"a": 1, "b": 2}, 3] | +-----------------------+
Maar nogmaals, als u een waarde probeert in te voegen op een pad dat al bestaat, blijft het JSON-document ongewijzigd:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[0]', 3) AS 'Result';
Resultaat:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
Voorbeeld 4 – Een groter JSON-document
Hier is een voorbeeld met een (iets) groter JSON-document.
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_INSERT(@data, '$.Person.Hobbies[2]', "Base Jumping") AS 'Result';
Resultaat:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} | +----------------------------------------------------------------------------------+
Zie ook JSON_ARRAY_INSERT()
en JSON_ARRAY_APPEND()
als u gegevens in een JSON-array moet invoegen of toevoegen.