In MySQL zijn er een aantal functies waarmee u met JSON-documenten kunt werken. Deze omvatten de JSON_SET()
, JSON_INSERT()
, en JSON_REPLACE()
functies.
Deze drie functies zijn gerelateerd, maar ze verschillen enigszins.
Syntaxis
Ten eerste, hier is de syntaxis voor alle drie de functies:
JSON_SET(json_doc, path, val[, path, val] ...) JSON_INSERT(json_doc, path, val[, path, val] ...) JSON_REPLACE(json_doc, path, val[, path, val] ...)
Dus alle drie de functies accepteren dezelfde argumenten. Dit is waar deze argumenten voor zijn:
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.
Het verschil
Dit is het verschil tussen deze functies:
JSON_SET()
vervangt bestaande waarden en voegt niet-bestaande waarden toe.JSON_INSERT()
voegt waarden in zonder bestaande waarden te vervangen.JSON_REPLACE()
vervangt alleen bestaande waarden.
Dus welke u gebruikt, hangt af van of u een bestaande waarde bijwerkt of een nieuwe invoegt (hoewel JSON_SET()
doet beide).
Voorbeeld 1 – Voer een waarde in
Hier zijn voorbeelden om het verschil tussen deze drie functies te demonstreren.
JSON_SET()
Dit is wat er gebeurt als we proberen een nieuwe waarde in te voegen met JSON_SET()
:
SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Resultaat:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
Dus het werkte perfect.
JSON_INSERT()
Dit is wat er gebeurt als we proberen een nieuwe waarde in te voegen met JSON_INSERT()
:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Resultaat:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
Precies hetzelfde resultaat als met JSON_SET()
.
JSON_REPLACE()
Dit is wat er gebeurt als we proberen een nieuwe waarde in te voegen met JSON_REPLACE()
:
SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Resultaat:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
In dit geval is de nieuwe waarde niet ingevoegd. Het originele JSON-document wordt ongewijzigd geretourneerd. Dit komt omdat deze functie alleen bestaande waarden vervangt - er worden geen nieuwe ingevoegd.
Voorbeeld 2 – Een bestaande waarde bijwerken
Nu voor het bijwerken van bestaande waarden.
JSON_SET()
Dit is wat er gebeurt als we proberen een bestaande waarde bij te werken met JSON_SET()
:
SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Resultaat:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
Dus nogmaals, het werkte perfect. We hebben het tweede sleutel/waarde-paar geüpdatet met de nieuwe waarde.
JSON_INSERT()
Dit is wat er gebeurt als we proberen een bestaande waarde bij te werken met JSON_INSERT()
:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Resultaat:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
In dit geval is de bestaande waarde niet bijgewerkt. Het JSON-document wordt ongewijzigd geretourneerd. Dit komt omdat de JSON_INSERT()
functie voegt alleen nieuwe waarden in - het werkt geen bestaande bij.
JSON_REPLACE()
Dit is wat er gebeurt als we proberen een bestaande waarde bij te werken met JSON_REPLACE()
:
SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Resultaat:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
Het wordt perfect bijgewerkt.