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_doc
jest dokumentem JSON.path
jest ścieżką elementu, dla którego należy wstawić nową wartość.val
to 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"]}} | +----------------------------------------------------------------------------------+