W MySQL JSON_INSERT()
funkcja wstawia wartość do dokumentu JSON i zwraca wynik.
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_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Wynik:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
Tak więc trzeci argument jest wstawiany do tablicy w określonej ścieżce. W tym przypadku używam $.c
dla ścieżki i 3
dla wstawianej wartości. Daje to parę klucz/wartość "c": 3
.
Oto kolejny przykład:
SELECT JSON_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
Wynik:
+------------------------------------------------+ | Result | +------------------------------------------------+ | {"Age": 39, "Name": "Homer", "Gender": "Male"} | +------------------------------------------------+
Przykład 2 – próba nadpisania istniejącej ścieżki
Para ścieżka-wartość dla istniejącej ścieżki w dokumencie jest ignorowana i nie zastępuje istniejącej wartości dokumentu.
Więc jeśli zmodyfikujemy poprzedni przykład, aby wstawić wartość w Name
(który już istnieje), wstawianie nie odbywa się:
SELECT JSON_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
Wynik:
+-------------------------------------+ | Result | +-------------------------------------+ | {"Name": "Homer", "Gender": "Male"} | +-------------------------------------+
Przykład 3 – Tablice
Możesz wstawić wartości do tablicy, używając ścieżki za końcem istniejącej tablicy. Przykład:
SELECT JSON_INSERT('[1, 2, 3]', '$[3]', 4) AS 'Result';
Wynik:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
Jeśli jednak użyjesz ścieżki, która już istnieje w tablicy, tablica pozostanie niezmieniona:
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';
Wynik:
+-----------+ | Result | +-----------+ | [1, 2, 3] | +-----------+
Jeśli istniejąca wartość nie jest tablicą, jest automatycznie zawijana jako tablica, a następnie rozszerzana o nową wartość. Przykład:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
Wynik:
+-----------------------+ | Result | +-----------------------+ | [{"a": 1, "b": 2}, 3] | +-----------------------+
Ale jeszcze raz, jeśli spróbujesz wstawić wartość w ścieżce, która już istnieje, dokument JSON pozostanie niezmieniony:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[0]', 3) AS 'Result';
Wynik:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
Przykład 4 – Większy dokument JSON
Oto przykład z (nieco) większym dokumentem JSON.
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_INSERT(@data, '$.Person.Hobbies[2]', "Base Jumping") AS 'Result';
Wynik:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} | +----------------------------------------------------------------------------------+
Zobacz także JSON_ARRAY_INSERT()
i JSON_ARRAY_APPEND()
jeśli potrzebujesz wstawić lub dołączyć dane do tablicy JSON.