W MariaDB, JSON_ARRAY_INSERT()
to wbudowana funkcja, która wstawia wartość do dokumentu JSON i zwraca wynik.
Składnia
Składnia wygląda tak:
JSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)
Gdzie json_doc
jest dokumentem JSON, path
jest ścieżką do miejsca, w którym chcesz wstawić wartości, a value
to wartość do wstawienia.
Przykład
Oto przykład do zademonstrowania.
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3);
Wynik:
+-------------------------------------------+ | JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3) | +-------------------------------------------+ | [0, 3, 1, 2] | +-------------------------------------------+
W tym przypadku wartość 3
został wstawiony do tablicy w pozycji 1
. Tablice są oparte na zerach, więc staje się drugim elementem tablicy.
Wstaw wiele wartości
Możesz wstawić wiele wartości w jednym wywołaniu JSON_ARRAY_INSERT()
.
Przykład:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5);
Wynik:
+------------------------------------------------------+ | JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5) | +------------------------------------------------------+ | [4, 0, 5, 1, 2] | +------------------------------------------------------+
Ocena odbywa się od lewej do prawej.
Oto, co się stanie, jeśli zmienimy path
/value
argumenty wokół:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4);
Wynik:
+------------------------------------------------------+ | JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4) | +------------------------------------------------------+ | [4, 0, 1, 5, 2] | +------------------------------------------------------+
Wiele tablic
Możesz wstawić wartości do więcej niż jednej tablicy w ramach tego samego wywołania JSON_ARRAY_INSERT()
.
Przykład:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5);
Wynik:
+--------------------------------------------------------+ | JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5) | +--------------------------------------------------------+ | {"a": [0, 4, 1], "b": [2, 3, 5]} | +--------------------------------------------------------+
Zagnieżdżone tablice
Oto przykład wstawiania wartości do zagnieżdżonej tablicy:
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4);
Wynik:
+--------------------------------------------+ | JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4) | +--------------------------------------------+ | [0, 1, [2, 4, 3]] | +--------------------------------------------+
Większy dokument JSON
Oto przykład z nieco większym dokumentem JSON.
Używam również JSON_DETAILED()
aby upiększyć wynik:
SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_INSERT(
@json_doc,
'$.pet.diet[1]',
'Chicken')
);
Wynik:
{ "pet": { "name": "Fluffy", "diet": [ "Fish", "Chicken", "Water" ] } }
Argumenty zerowe
Jeśli pierwszym argumentem jest NULL
, wynik to NULL
:
SELECT JSON_ARRAY_INSERT(null, '$[1]', 4);
Wynik:
+------------------------------------+ | JSON_ARRAY_INSERT(null, '$[1]', 4) | +------------------------------------+ | NULL | +------------------------------------+
To samo dotyczy path
argument:
SELECT JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4);
Wynik:
+--------------------------------------------+ | JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4) | +--------------------------------------------+ | NULL | +--------------------------------------------+
Jeśli jednak value
argument to NULL
, a następnie NULL
jest wstawiany do tablicy:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null);
Wynik:
+----------------------------------------------+ | JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null) | +----------------------------------------------+ | [0, null, 1, 2] | +----------------------------------------------+
Możesz także użyć JSON_ARRAY_APPEND()
aby dołączyć wartości do tablicy.