In MariaDB, JSON_REPLACE()
is een ingebouwde functie die bestaande waarden in een JSON-document vervangt en het resultaat retourneert.
Syntaxis
De syntaxis gaat als volgt:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT JSON_REPLACE(@json, '$.type', 'Dog');
Resultaat:
+--------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Dog') | +--------------------------------------+ | {"name": "Wag", "type": "Dog"} | +--------------------------------------+
In dit geval heb ik de waarde Cat
vervangen met Dog
.
Array-elementen
Om een array-element te vervangen, specificeert u de index van het element:
SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';
SELECT JSON_REPLACE(@json, '$.scores[1]', 7);
Resultaat:
+---------------------------------------+ | JSON_REPLACE(@json, '$.scores[1]', 7) | +---------------------------------------+ | {"name": "Wag", "scores": [8, 7, 9]} | +---------------------------------------+
In dit geval is het tweede array-element vervangen door de nieuwe waarde. Arrays zijn gebaseerd op nul, en dus $.scores[1]
verwijst naar het tweede element in de array.
Meerdere paden
De syntaxis maakt het mogelijk om waarden op meerdere paden te vervangen door een enkele aanroep van JSON_REPLACE()
.
Wanneer u meerdere paden opgeeft, worden ze van links naar rechts geëvalueerd. Dit betekent dat het resultaat van de eerdere evaluatie wordt gebruikt als waarde voor de volgende.
Ten eerste is hier een voorbeeld dat meerdere waarden in een document vervangt op basis van hun sleutel:
SET @json = '
{
"name" : "Flutter",
"type" : "Bird",
"weight" : 10
}
';
SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);
Resultaat:
+------------------------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) | +------------------------------------------------------+ | {"name": "Flutter", "type": "Bat", "weight": 20} | +------------------------------------------------------+
Elke waarde is zoals verwacht vervangen.
In het volgende voorbeeld vervangen we meerdere elementen in een array:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REPLACE(
@json,
'$.scores[2]', "a",
'$.scores[4]', "b"
) AS Result;
Resultaat:
+------------------------------------+ | Result | +------------------------------------+ | {"scores": [0, 1, "a", 3, "b", 5]} | +------------------------------------+
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_REPLACE(null, '$.a', 1) AS a,
JSON_REPLACE('{"a":1}', null, 1) AS b,
JSON_REPLACE('{"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_REPLACE()
. Dit resulteert in NULL
wordt teruggestuurd voor beide oproepen:
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT
JSON_REPLACE(@json, null, 'Bark', '$.type', 'Dog') AS a,
JSON_REPLACE(@json, '$.name', 'Bark', null, 'Dog') AS b;
Resultaat:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
Onjuist aantal parameters
Aanroepen van JSON_REPLACE()
zonder een argument resulteert in een fout:
SELECT JSON_REPLACE();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Het is hetzelfde als er niet genoeg argumenten worden doorgegeven:
SELECT JSON_REPLACE('{"a":1}');
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Vergelijkbare functies
De JSON_INSERT()
functie kan nieuwe gegevens invoegen.
De JSON_SET()
functie kan nieuwe gegevens invoegen en bestaande gegevens bijwerken. Dus JSON_SET()
is als JSON_INSERT()
en JSON_REPLACE()
in één functie.