In MariaDB, JSON_SET()
is een ingebouwde functie die gegevens bijwerkt of invoegt in een JSON-document en het resultaat retourneert.
JSON_SET()
kan gegevens bijwerken en invoegen, terwijl JSON_INSERT()
kan alleen gegevens invoegen, en JSON_REPLACE()
kan alleen gegevens 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.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SET @json = '
{
"name" : "Wag",
"type" : "Cat"
}
';
SELECT JSON_SET(@json, '$.type', 'Dog');
Resultaat:
+----------------------------------+ | JSON_SET(@json, '$.type', 'Dog') | +----------------------------------+ | {"name": "Wag", "type": "Dog"} | +----------------------------------+
In dit geval heb ik de waarde van het type
. bijgewerkt lid Cat
tot Dog
.
Array-elementen
Om een array-element bij te werken of in te voegen, specificeert u de index van het element:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT JSON_SET(@json, '$.scores[1]', 7);
Resultaat:
+--------------------------------------+ | JSON_SET(@json, '$.scores[1]', 7) | +--------------------------------------+ | {"name": "Wag", "scores": [8, 7, 9]} | +--------------------------------------+
In dit geval is het tweede array-element bijgewerkt met de nieuwe waarde. Arrays zijn gebaseerd op nul, en dus $.scores[1]
verwijst naar het tweede element in de array.
Gegevens invoegen
De vorige voorbeelden hebben bestaande gegevens bijgewerkt. Hier is een voorbeeld van het invoegen van nieuwe gegevens:
SET @json = '
{
"name" : "Wag",
"type" : "Dog"
}
';
SELECT JSON_SET(@json, '$.weight', 10);
Resultaat:
+----------------------------------------------+ | JSON_SET(@json, '$.weight', 10) | +----------------------------------------------+ | {"name": "Wag", "type": "Dog", "weight": 10} | +----------------------------------------------+
Hier hebben we een nieuw sleutel/waarde-paar ingevoegd ("weight": 10
).
Hieronder ziet u een voorbeeld van het toevoegen van een nieuw element aan een array:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT JSON_SET(@json, '$.scores[3]', 7);
Resultaat:
+-----------------------------------------+ | JSON_SET(@json, '$.scores[3]', 7) | +-----------------------------------------+ | {"name": "Wag", "scores": [8, 0, 9, 7]} | +-----------------------------------------+
Dit arrayvoorbeeld kan ook worden gedaan met JSON_ARRAY_INSERT()
of JSON_ARRAY_APPEND()
.
Meerdere paden
De syntaxis maakt het mogelijk om waarden op meerdere paden in te stellen/bij te werken met een enkele aanroep van JSON_SET()
.
Voorbeeld:
SET @json = '
{
"name" : "Scratch",
"type" : "Rat"
}
';
SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);
Resultaat:
+--------------------------------------------------+ | JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) | +--------------------------------------------------+ | {"name": "Scratch", "type": "Cat", "weight": 10} | +--------------------------------------------------+
In het volgende voorbeeld voegen we een nieuwe waarde in een array in en werken een andere bij:
SET @json = '{ "scores" : [ 0, 1, 2 ] }';
SELECT
JSON_SET(
@json,
'$.scores[1]', "a",
'$.scores[3]', "b"
) AS Result;
Resultaat:
+------------------------------+ | Result | +------------------------------+ | {"scores": [0, "a", 2, "b"]} | +------------------------------+
Nullargumenten
Als de json_doc
of een van de path
argumenten is null
, het resultaat is NULL
. Maar als de value
argument is null
, dan wordt de waarde vervangen door null
.
SELECT
JSON_SET(null, '$.a', 1) AS a,
JSON_SET('{"a":1}', null, 1) AS b,
JSON_SET('{"a":1}', '$.a', null) AS c;
Resultaat:
+------+------+-------------+ | a | b | c | +------+------+-------------+ | NULL | NULL | {"a": null} | +------+------+-------------+
In het volgende voorbeeld ontbreekt een van de padargumenten bij elke aanroep naar JSON_SET()
. In beide gevallen is het resultaat NULL
:
SET @json = '
{
"name" : "Wag",
"type" : "Cat"
}
';
SELECT
JSON_SET(@json, null, 'Bark', '$.type', 'Dog') AS a,
JSON_SET(@json, '$.name', 'Bark', null, 'Dog') AS b;
Resultaat:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
Onjuist aantal parameters
Aanroepen van JSON_SET()
zonder een argument resulteert in een fout:
SELECT JSON_SET();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'
Het is hetzelfde als er niet genoeg argumenten worden doorgegeven:
SELECT JSON_SET('{"a":1}');
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'