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"]}} |
+--------------------------------------------------------------------------------+