W MySQL JSON_ARRAY_INSERT() funkcja służy do wstawiania nowej wartości do tablicy.
Jako pierwszy argument podajesz dokument JSON, po którym następuje ścieżka do wstawienia, a następnie wartość do wstawienia.
Składnia
Składnia wygląda tak:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Gdzie:
json_docjest dokumentem JSON.pathjest ścieżką elementu, dla którego należy wstawić nową wartość.valto nowa wartość, która zostanie wstawiona.
Pary ścieżka-wartość są oceniane od lewej do prawej. Dokument utworzony przez ocenę jednej pary staje się nową wartością, względem której oceniana jest następna para.
Przykład 1 – Podstawowe użycie
Oto przykład do zademonstrowania.
SELECT JSON_ARRAY_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';
Wynik:
+--------------+ | Result | +--------------+ | [1, 4, 2, 3] | +--------------+
Tak więc trzeci argument jest wstawiany do tablicy w określonej ścieżce. W tym przypadku używam $[1] dla ścieżki, która odnosi się do drugiego elementu (tablice JSON używają numeracji od zera – numeracja zaczyna się od 0 ).
Przykład 2 – Tablica zagnieżdżona
Oto przykład wstawiania wartości do tablicy, która jest zagnieżdżona w innej tablicy.
SELECT JSON_ARRAY_INSERT('[1, 2, [3, 4]]', '$[2][1]', 5) AS 'Result';
Wynik:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 5, 4]] | +-------------------+
Więc tutaj używam $[2][1] jako ścieżka. [2] odnosi się do trzeciego elementu tablicy zewnętrznej. [1] odnosi się do drugiego elementu zagnieżdżonej tablicy.
Przykład 3 – Większy dokument JSON
W tym przykładzie użyto (nieco) większego dokumentu JSON. Pokazuje to, jak ścieżka zmienia się w zależności od tego, gdzie w dokumencie znajduje się tablica.
SET @data = '{
"Person": {
"Name": "Homer",
"Hobbies": ["Eating", "Sleeping"]
}
}';
SELECT JSON_ARRAY_INSERT(@data, '$.Person.Hobbies[1]', "Base Jumping") AS 'Result';
Wynik:
+----------------------------------------------------------------------------------+
| Result |
+----------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Base Jumping", "Sleeping"]}} |
+----------------------------------------------------------------------------------+