Последнее обновление
JSON_INSERT
Описание
Функция JSON_INSERT вставляет данные в JSON и возвращает результат.
Синтаксис
JSON_INSERT (<json_object>, <path>, <value>[, <path>, <value>, ...])
Параметры
<json_object>: выражение типа JSON, задающее изменяемый объект.<path>: выражение строкового типа, задающее путь для вставки значения<value>: значение типа JSON или другого типа, поддерживаемогоTO_JSON, которое требуется вставить.
Возвращаемое значение
Nullable(JSON)Возвращает изменённый объект JSON
Примечания по использованию
- Обратите внимание, что пары «путь — значение» обрабатываются слева направо.
- Если значение, на которое указывает
<path>, уже существует в объекте JSON, вставка не выполняется. <path>не может содержать подстановочные знаки. При их наличии возникает ошибка.- Если
<path>содержит несколько уровней пути, все уровни, кроме последнего, должны существовать в объекте JSON. - Если
<path>указывает на элемент массива, но объект фактически не является массивом, этот объект становится первым элементом массива, после чего обработка продолжается как для обычного массива. - Если
<json_object>или<path>равен NULL, возвращается NULL. Если<value>равен NULL, вставляется значение JSON null.
Примеры
- Пары «путь — значение» обрабатываются слева направо
select json_insert('{}', '$.k', json_parse('{}'), '$.k.k2', 123);+-----------------------------------------------------------+
| json_insert('{}', '$.k', json_parse('{}'), '$.k.k2', 123) |
+-----------------------------------------------------------+
| {"k":{"k2":123}} |
+-----------------------------------------------------------+ - Значение, на которое указывает
<path>, уже существует в объекте JSONselect json_insert('{"k": 1}', "$.k", 2);+-----------------------------------+
| json_insert('{"k": 1}', "$.k", 2) |
+-----------------------------------+
| {"k":1} |
+-----------------------------------+ <path>не может содержать подстановочные знакиselect json_insert('{"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- Создание многоуровневых путей невозможно
select json_insert('{}', '$.k1.k2.k3', 123);+--------------------------------------+
| json_insert('{}', '$.k1.k2.k3', 123) |
+--------------------------------------+
| {} |
+--------------------------------------+ - Автоматическое преобразование в массив
select json_insert('{"k": "v"}', '$[1]', 123);+----------------------------------------+
| json_insert('{"k": "v"}', '$[1]', 123) |
+----------------------------------------+
| [{"k": "v"}, 123] |
+----------------------------------------+select json_insert('{"k": "v"}', '$.k[1]', 123);+------------------------------------------+
| json_insert('{"k": "v"}', '$.k[1]', 123) |
+------------------------------------------+
| {"k": ["v", 123]} |
+------------------------------------------+ - Параметры со значением NULL
select json_insert(NULL, '$[1]', 123);+--------------------------------+
| json_insert(NULL, '$[1]', 123) |
+--------------------------------+
| NULL |
+--------------------------------+select json_insert('{"k": "v"}', NULL, 123);+--------------------------------------+
| json_insert('{"k": "v"}', NULL, 123) |
+--------------------------------------+
| NULL |
+--------------------------------------+select json_insert('{"k": "v"}', '$.k[1]', NULL);+-------------------------------------------+
| json_insert('{"k": "v"}', '$.k[1]', NULL) |
+-------------------------------------------+
| {"k": ["v", null]} |
+-------------------------------------------+