Używając dokumentów JSON z MySQL, możesz użyć JSON_ARRAY_APPEND()
funkcja dodawania nowych wartości do tablicy.
Działa to tak, że jako pierwszy argument podajesz dokument JSON, a następnie podążasz za nim ścieżką, do której chcesz dołączyć, a następnie wartością do dołączenia.
W MySQL 5.7 ta funkcja nazywała się JSON_APPEND()
ale ta nazwa nie jest już obsługiwana.
Składnia
Składnia wygląda tak:
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
Gdzie:
json_doc
jest dokumentem JSON.path
jest ścieżką elementu, do którego ma zostać dodana nowa wartość.val
to nowa wartość, która zostanie dodana.
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_APPEND('[1, 2, 3]', '$', 4) AS 'Result';
Wynik:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
Tak więc trzeci argument jest dołączany do tablicy. W tym przypadku używam $
dla ścieżki. Jest to synonim dokumentu JSON, więc wartość jest dodawana do tablicy najwyższego poziomu (która w tym przypadku jest jedyną tablicą).
Przykład 2 – Tablica zagnieżdżona
Oto przykład dołączania wartości do tablicy, która jest zagnieżdżona w innej tablicy.
SELECT JSON_ARRAY_APPEND('[1, 2, [3, 4]]', '$[2]', 5) AS 'Result';
Wynik:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 4, 5]] | +-------------------+
Więc tutaj używam $[2]
jako ścieżka. To określa tablicę na trzecim elemencie (tablice używają numeracji od zera, więc liczba zaczyna się od zera).
Jeśli w tym elemencie nie było jeszcze tablicy, tworzona jest nowa tablica.
Tak:
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$[2]', 4) AS 'Result';
Wynik:
+----------------+ | Result | +----------------+ | [1, 2, [3, 4]] | +----------------+
Przykład 3 – Większy dokument JSON
W tym przykładzie użyto (nieco) większego dokumentu JSON. To pokazuje, 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_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';
Wynik:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} | +----------------------------------------------------------------------------------+
I tak jak w poprzednim przykładzie, w razie potrzeby możemy również utworzyć nową, zagnieżdżoną tablicę:
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';
Wynik:
+--------------------------------------------------------------------------------+ | Result | +--------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": [["Eating", "Drinking"], "Sleeping"]}} | +--------------------------------------------------------------------------------+