W MariaDB, JSON_REPLACE()
to wbudowana funkcja, która zastępuje istniejące wartości w dokumencie JSON i zwraca wynik.
Składnia
Składnia wygląda tak:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
Przykład
Oto przykład do zademonstrowania.
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT JSON_REPLACE(@json, '$.type', 'Dog');
Wynik:
+--------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Dog') | +--------------------------------------+ | {"name": "Wag", "type": "Dog"} | +--------------------------------------+
W tym przypadku podmieniłem wartość Cat
z Dog
.
Elementy tablicy
Aby zastąpić element tablicy, określ indeks elementu:
SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';
SELECT JSON_REPLACE(@json, '$.scores[1]', 7);
Wynik:
+---------------------------------------+ | JSON_REPLACE(@json, '$.scores[1]', 7) | +---------------------------------------+ | {"name": "Wag", "scores": [8, 7, 9]} | +---------------------------------------+
W tym przypadku drugi element tablicy został zastąpiony nową wartością. Tablice są oparte na zerach, więc $.scores[1]
odnosi się do drugiego elementu w tablicy.
Wiele ścieżek
Składnia pozwala na zastąpienie wartości w wielu ścieżkach jednym wywołaniem JSON_REPLACE()
.
Gdy podajesz wiele ścieżek, są one oceniane od lewej do prawej. Oznacza to, że wynik z wcześniejszej oceny jest używany jako wartość dla następnej.
Po pierwsze, oto przykład, który zastępuje wiele wartości w dokumencie na podstawie ich klucza:
SET @json = '
{
"name" : "Flutter",
"type" : "Bird",
"weight" : 10
}
';
SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);
Wynik:
+------------------------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) | +------------------------------------------------------+ | {"name": "Flutter", "type": "Bat", "weight": 20} | +------------------------------------------------------+
Każda wartość została zastąpiona zgodnie z oczekiwaniami.
W następnym przykładzie zastępujemy wiele elementów w tablicy:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REPLACE(
@json,
'$.scores[2]', "a",
'$.scores[4]', "b"
) AS Result;
Wynik:
+------------------------------------+ | Result | +------------------------------------+ | {"scores": [0, 1, "a", 3, "b", 5]} | +------------------------------------+
Argumenty zerowe
Jeśli json_doc
lub dowolna ze path
argumenty są null
, wynik to NULL
. Ale jeśli value
argument jest null
, wartość jest zastępowana 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;
Wynik:
+------+------+-------------+ | a | b | c | +------+------+-------------+ | NULL | NULL | {"a": null} | +------+------+-------------+
W poniższym przykładzie brakuje jednego z argumentów ścieżki w każdym wywołaniu JSON_REPLACE()
. Powoduje to NULL
zwrot za oba połączenia:
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;
Wynik:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
Nieprawidłowa liczba parametrów
Wywołanie JSON_REPLACE()
bez argumentu powoduje błąd:
SELECT JSON_REPLACE();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Tak samo jest, gdy nie przekazano wystarczającej liczby argumentów:
SELECT JSON_REPLACE('{"a":1}');
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Podobne funkcje
JSON_INSERT()
funkcja może wstawić nowe dane.
JSON_SET()
funkcja może wstawiać nowe dane i aktualizować istniejące. Więc JSON_SET()
jest jak JSON_INSERT()
i JSON_REPLACE()
w jednej funkcji.