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_docis het JSON-document.pathis het pad van het element waarvoor u gegevens wilt invoegen of de waarde wilt bijwerken.valis 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'