V MariaDB, JSON_SET()
je vestavěná funkce, která aktualizuje nebo vkládá data do dokumentu JSON a vrací výsledek.
JSON_SET()
může aktualizovat a vkládat data, zatímco JSON_INSERT()
může vkládat pouze data a JSON_REPLACE()
může pouze aktualizovat data.
Syntaxe
Syntaxe vypadá takto:
JSON_SET(json_doc, path, val[, path, val] ...)
Kde:
json_doc
je dokument JSON.path
je cesta prvku, pro který se mají vložit data nebo aktualizovat hodnotu na.val
je nová hodnota.
Příklad
Zde je příklad k demonstraci.
SET @json = '
{
"name" : "Wag",
"type" : "Cat"
}
';
SELECT JSON_SET(@json, '$.type', 'Dog');
Výsledek:
+----------------------------------+ | JSON_SET(@json, '$.type', 'Dog') | +----------------------------------+ | {"name": "Wag", "type": "Dog"} | +----------------------------------+
V tomto případě jsem aktualizoval hodnotu type
člen Cat
na Dog
.
Prvky pole
Chcete-li aktualizovat nebo vložit prvek pole, zadejte index prvku:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT JSON_SET(@json, '$.scores[1]', 7);
Výsledek:
+--------------------------------------+ | JSON_SET(@json, '$.scores[1]', 7) | +--------------------------------------+ | {"name": "Wag", "scores": [8, 7, 9]} | +--------------------------------------+
V tomto případě byl druhý prvek pole aktualizován novou hodnotou. Pole jsou založeny na nule, takže $.scores[1]
odkazuje na druhý prvek v poli.
Vložit data
Předchozí příklady aktualizovaly stávající data. Zde je příklad vkládání nových dat:
SET @json = '
{
"name" : "Wag",
"type" : "Dog"
}
';
SELECT JSON_SET(@json, '$.weight', 10);
Výsledek:
+----------------------------------------------+ | JSON_SET(@json, '$.weight', 10) | +----------------------------------------------+ | {"name": "Wag", "type": "Dog", "weight": 10} | +----------------------------------------------+
Zde jsme vložili nový pár klíč/hodnota ("weight": 10
).
Níže je uveden příklad přidání nového prvku do pole:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT JSON_SET(@json, '$.scores[3]', 7);
Výsledek:
+-----------------------------------------+ | JSON_SET(@json, '$.scores[3]', 7) | +-----------------------------------------+ | {"name": "Wag", "scores": [8, 0, 9, 7]} | +-----------------------------------------+
Tento příklad pole lze také provést pomocí JSON_ARRAY_INSERT()
nebo JSON_ARRAY_APPEND()
.
Více cest
Syntaxe umožňuje nastavení/aktualizaci hodnot na více cestách jediným voláním JSON_SET()
.
Příklad:
SET @json = '
{
"name" : "Scratch",
"type" : "Rat"
}
';
SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);
Výsledek:
+--------------------------------------------------+ | JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) | +--------------------------------------------------+ | {"name": "Scratch", "type": "Cat", "weight": 10} | +--------------------------------------------------+
V dalším příkladu vložíme novou hodnotu do pole a aktualizujeme další:
SET @json = '{ "scores" : [ 0, 1, 2 ] }';
SELECT
JSON_SET(
@json,
'$.scores[1]', "a",
'$.scores[3]', "b"
) AS Result;
Výsledek:
+------------------------------+ | Result | +------------------------------+ | {"scores": [0, "a", 2, "b"]} | +------------------------------+
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_SET(null, '$.a', 1) AS a,
JSON_SET('{"a":1}', null, 1) AS b,
JSON_SET('{"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_SET()
. V obou případech je výsledkem 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;
Výsledek:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
Nesprávný počet parametrů
Volání JSON_SET()
bez argumentu vede k chybě:
SELECT JSON_SET();
Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'
Je to stejné, když není předán dostatek argumentů:
SELECT JSON_SET('{"a":1}');
Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'