Последнее обновление
JSON_REPLACE
Описание
Функция JSON_REPLACE заменяет данные в JSON и возвращает результат.
Синтаксис
JSON_REPLACE (<json_object>, <path>, <value>[, <path>, <value>, ...])
Параметры
<json_object>: выражение типа JSON, задающее объект для изменения.<path>: выражение строкового типа, задающее путь к значению, которое нужно заменить.<value>: значение типа JSON или другого типа, поддерживаемого функциейTO_JSON, которое будет использовано для замены.
Возвращаемое значение
- Nullable(JSON) Возвращает изменённый объект JSON.
Примечания по использованию
- Обратите внимание, что пары «путь-значение» обрабатываются слева направо.
- Если значение, на которое указывает
<path>, отсутствует в объекте JSON, соответствующая замена не выполняется. <path>не может содержать подстановочные символы. При их наличии возникает ошибка.- Если
<json_object>или<path>равен NULL, возвращается NULL. Если<value>равен NULL, вставляется значение JSON null.
Примеры
- Пары «путь-значение» обрабатываются слева направо
select json_replace('{"k": {"k2": "v2"}}', '$.k', json_parse('{"k2": 321, "k3": 456}'), '$.k.k2', 123);+-------------------------------------------------------------------------------------------------+
| json_replace('{"k": {"k2": "v2"}}', '$.k', json_parse('{"k2": 321, "k3": 456}'), '$.k.k2', 123) |
+-------------------------------------------------------------------------------------------------+
| {"k":{"k2":123,"k3":456}} |
+-------------------------------------------------------------------------------------------------+ - Значение, на которое указывает
<path>, отсутствует в объекте JSONselect json_replace('{"k": 1}', "$.k2", 2);+-------------------------------------+
| json_replace('{"k": 1}', "$.k2", 2) |
+-------------------------------------+
| {"k":1} |
+-------------------------------------+ <path>не может содержать подстановочные символыselect json_replace('{"k": 1}', "$.*", 2);ERROR 1105 (HY000): errCode = 2, detailMessage = [INVALID_ARGUMENT] In this situation, path expressions may not contain the * and ** tokens or an array range, argument index: 1, row index: 0- Параметры со значением NULL
select json_replace(NULL, '$[1]', 123);+---------------------------------+
| json_replace(NULL, '$[1]', 123) |
+---------------------------------+
| NULL |
+---------------------------------+select json_replace('{"k": "v"}', NULL, 123);+---------------------------------------+
| json_replace('{"k": "v"}', NULL, 123) |
+---------------------------------------+
| NULL |
+---------------------------------------+select json_replace('{"k": "v"}', '$.k', NULL);+-----------------------------------------+
| json_replace('{"k": "v"}', '$.k', NULL) |
+-----------------------------------------+
| {"k":null} |
+-----------------------------------------+