W MySQL JSON_REPLACE()
funkcja zastępuje wartości w dokumencie JSON i zwraca wynik.
Jako pierwszy argument podajesz dokument JSON, po którym następuje ścieżka do zastąpienia danych, a następnie wartość, którą chcesz zastąpić istniejącą wartość.
W razie potrzeby możesz zastąpić dane w wielu miejscach w dokumencie. Aby to zrobić, po prostu podaj wiele par ścieżka/wartość zgodnie z wymaganiami.
Składnia
Składnia wygląda tak:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
Gdzie json_doc
jest dokumentem JSON, path
jest ścieżką do zastąpienia danych, a val
to nowa wartość zastępująca istniejącą.
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.
Jeśli para ścieżka/wartość nie istnieje w dokumencie JSON, jest ignorowana i nie ma żadnego efektu.
Pierwszy argument musi być prawidłowym dokumentem JSON, w przeciwnym razie wystąpi błąd.
Również path
argument musi być prawidłowym wyrażeniem ścieżki i nie może zawierać *
lub **
symbol wieloznaczny, w przeciwnym razie wystąpi błąd.
Przykład 1 – Podstawowe użycie
Oto przykład do zademonstrowania.
SELECT JSON_REPLACE('{"a": 1, "b": 2, "c": 3}', '$.b', 9) AS 'Result';
Wynik:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 9, "c": 3} | +--------------------------+
W tym przypadku zastąpiliśmy b
wartość z 9
. Dzieje się tak, ponieważ określiliśmy $.b
jako drugi argument i 9
jako trzeci.
Oto kolejny przykład:
SELECT JSON_REPLACE('{"Name": "Bart", "Age": 10}', '$.Name', 'Nelson - Ha Ha!') AS 'Result';
Wynik:
+----------------------------------------+ | Result | +----------------------------------------+ | {"Age": 10, "Name": "Nelson - Ha Ha!"} | +----------------------------------------+
Przykład 2 – Nieistniejąca ścieżka
Jeśli określisz ścieżkę, która nie istnieje, nic nie zostanie usunięte. Oryginalny dokument JSON jest zwracany bez modyfikacji.
SELECT JSON_REPLACE('{"Name": "Homer", "Age": 39}', '$.Gender', 'Male') AS 'Result';
Wynik:
+------------------------------+ | Result | +------------------------------+ | {"Age": 39, "Name": "Homer"} | +------------------------------+
Przykład 3 – Tablice
Oto przykład użycia tablicy.
SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) AS 'Result';
Wynik:
+-----------+ | Result | +-----------+ | [9, 2, 3] | +-----------+
Tablice używają numeracji od zera, więc w tym przypadku pierwszy element jest zastępowany.
Oto kolejny przykład tablicy. Tym razem zastępujemy wartość w zagnieżdżonej tablicy.
SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) AS 'Result';
Wynik:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 9, 5]] | +-------------------+
Przykład 4 – Wiele ścieżek
Możesz określić więcej niż jedną ścieżkę, aby zastąpić dane w wielu miejscach w dokumencie JSON.
Podstawowy przykład:
SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) AS 'Result';
Wynik:
+------------------+ | Result | +------------------+ | [1, 9, 3, 22, 5] | +------------------+
Przykład 5 – Większy dokument JSON
Oto przykład z (nieco) większym dokumentem JSON.
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_REPLACE(@data, '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') AS 'Result';
Wynik:
+--------------------------------------------------------------------------------+ | Result | +--------------------------------------------------------------------------------+ | {"Person": {"Age": 10, "Name": "Bart", "Hobbies": ["Eating", "Base Jumping"]}} | +--------------------------------------------------------------------------------+