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_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_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.