W MySQL JSON_SET()
funkcja wstawia lub aktualizuje wartości w dokumencie JSON i zwraca wynik.
Jako pierwszy argument podajesz dokument JSON, po którym następuje ścieżka do wstawienia, a po niej wartość do wstawienia. Możesz podać wiele par ścieżka/wartość, jeśli chcesz zaktualizować wiele wartości.
Składnia
Składnia wygląda tak:
JSON_SET(json_doc, path, val[, path, val] ...)
Gdzie:
json_doc
jest dokumentem JSON.path
jest ścieżką elementu, dla którego należy wstawić dane lub zaktualizować wartość.val
to nowa wartość.
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.
Błąd występuje, jeśli pierwszy argument nie jest prawidłowym dokumentem JSON lub jeśli dowolny argument ścieżki nie jest prawidłowym wyrażeniem ścieżki lub zawiera *
lub **
symbol wieloznaczny.
Przykład 1 – Wstaw wartość
Oto przykład pokazujący, jak wstawić wartość za pomocą tej funkcji.
SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Wynik:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
W takim przypadku trzeci argument jest wstawiany do tablicy w określonej ścieżce. 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_SET('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
Wynik:
+------------------------------------------------+ | Result | +------------------------------------------------+ | {"Age": 39, "Name": "Homer", "Gender": "Male"} | +------------------------------------------------+
Przykład 2 – Aktualizacja wartości
W poprzednim przykładzie wstawiono wartość. Ten przykład aktualizuje istniejącą wartość.
SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Wynik:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
Oto kolejny przykład:
SELECT JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
Wynik:
+------------------------------------+ | Result | +------------------------------------+ | {"Name": "Bart", "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_SET('[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, wartość zostanie zaktualizowana:
SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) AS 'Result';
Wynik:
+-----------+ | Result | +-----------+ | [1, 4, 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_SET('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
Wynik:
+-----------------------+ | Result | +-----------------------+ | [{"a": 1, "b": 2}, 3] | +-----------------------+
Przykład 4 – Wiele wartości
Możesz wstawić/zaktualizować wiele wartości jednocześnie. Po prostu dodaj każdą parę klucz/wartość oddzieloną przecinkiem. Przykład:
SELECT JSON_SET('{"a": 1, "b": 2, "c": 3}', '$.a', 9, '$.c', 'Bart') AS 'Result';
Wynik:
+-------------------------------+ | Result | +-------------------------------+ | {"a": 9, "b": 2, "c": "Bart"} | +-------------------------------+
Przykład 5 – Większy dokument JSON
Oto przykład z (nieco) większym dokumentem JSON.
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_SET(@data, '$.Person.Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Result';
Wynik:
+-----------------------------------------------------------------+ | Result | +-----------------------------------------------------------------+ | {"Person": {"Name": "Bart", "Hobbies": ["Eating", "Mischief"]}} | +-----------------------------------------------------------------+
Zobacz także JSON_INSERT()
do wstawiania wartości bez zastępowania istniejących wartości oraz JSON_REPLACE()
do zastępowania tylko istniejących wartości.