V MariaDB, JSON_REPLACE()
je vestavěná funkce, která nahrazuje existující hodnoty v dokumentu JSON a vrací výsledek.
Syntaxe
Syntaxe vypadá takto:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
Příklad
Zde je příklad k demonstraci.
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT JSON_REPLACE(@json, '$.type', 'Dog');
Výsledek:
+--------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Dog') | +--------------------------------------+ | {"name": "Wag", "type": "Dog"} | +--------------------------------------+
V tomto případě jsem nahradil hodnotu Cat
se Dog
.
Prvky pole
Chcete-li nahradit prvek pole, zadejte index prvku:
SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';
SELECT JSON_REPLACE(@json, '$.scores[1]', 7);
Výsledek:
+---------------------------------------+ | JSON_REPLACE(@json, '$.scores[1]', 7) | +---------------------------------------+ | {"name": "Wag", "scores": [8, 7, 9]} | +---------------------------------------+
V tomto případě byl druhý prvek pole nahrazen novou hodnotou. Pole jsou založeny na nule, takže $.scores[1]
odkazuje na druhý prvek v poli.
Více cest
Syntaxe umožňuje nahrazení hodnot na více cestách jediným voláním JSON_REPLACE()
.
Při poskytování více cest se vyhodnocují zleva doprava. To znamená, že výsledek z dřívějšího vyhodnocení se použije jako hodnota pro další.
Nejprve je zde příklad, který nahradí více hodnot v dokumentu na základě jejich klíče:
SET @json = '
{
"name" : "Flutter",
"type" : "Bird",
"weight" : 10
}
';
SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);
Výsledek:
+------------------------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) | +------------------------------------------------------+ | {"name": "Flutter", "type": "Bat", "weight": 20} | +------------------------------------------------------+
Každá hodnota byla nahrazena podle očekávání.
V dalším příkladu nahradíme více prvků v poli:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REPLACE(
@json,
'$.scores[2]', "a",
'$.scores[4]', "b"
) AS Result;
Výsledek:
+------------------------------------+ | Result | +------------------------------------+ | {"scores": [0, 1, "a", 3, "b", 5]} | +------------------------------------+
Nulové argumenty
Pokud json_doc
nebo kteroukoli z path
arguments je null
, výsledkem je NULL
. Ale pokud value
argument je null
, pak je hodnota nahrazena 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;
Výsledek:
+------+------+-------------+ | a | b | c | +------+------+-------------+ | NULL | NULL | {"a": null} | +------+------+-------------+
V následujícím příkladu chybí jeden z argumentů cesty v každém volání JSON_REPLACE()
. Výsledkem je NULL
se vrací pro oba hovory:
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;
Výsledek:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
Nesprávný počet parametrů
Volání JSON_REPLACE()
bez argumentu vede k chybě:
SELECT JSON_REPLACE();
Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Je to stejné, když není předán dostatek argumentů:
SELECT JSON_REPLACE('{"a":1}');
Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Podobné funkce
JSON_INSERT()
funkce může vkládat nová data.
JSON_SET()
funkce může vkládat nová data a aktualizovat stávající data. Takže JSON_SET()
je jako JSON_INSERT()
a JSON_REPLACE()
v jedné funkci.