JSON_SET
描述
JSON_SET 函数用于在 JSON 中插入或者替换数据并返回结果。
语法
JSON_SET (<json_object>, <path>, <value>[, <path>, <value>, ...])
参数
<json_object>JSON 类型表达式,被修改的目标。<path>String 类型表达式,指定插入值的路径<value>JSON 类型或其他TO_JSON支持的类型,要插入的值。
返回值
Nullable(JSON)返回被修改后的 JSON 对象
使用说明
- 当
<path>指向的对象存在时,其行为和JSON_REPLACE一致,否则其行为和JSON_INSERT一致
示例
- 路径不存在
select json_set('{}', '$.k', json_parse('{}'), '$.k.k2', 123);+--------------------------------------------------------+
| json_set('{}', '$.k', json_parse('{}'), '$.k.k2', 123) |
+--------------------------------------------------------+
| {"k":{"k2":123}} |
+--------------------------------------------------------+ <path>指向的值在 JSON 对象中已经存在select json_set('{"k": 1}', "$.k", 2);+--------------------------------+
| json_set('{"k": 1}', "$.k", 2) |
+--------------------------------+
| {"k":2} |
+--------------------------------+- NULL 参数
select json_set(NULL, '$[1]', 123);+-----------------------------+
| json_set(NULL, '$[1]', 123) |
+-----------------------------+
| NULL |
+-----------------------------+select json_set('{"k": "v"}', NULL, 123);+-----------------------------------+
| json_set('{"k": "v"}', NULL, 123) |
+-----------------------------------+
| NULL |
+-----------------------------------+select json_set('{"k": "v"}', '$.k[1]', NULL);+----------------------------------------+
| json_set('{"k": "v"}', '$.k[1]', NULL) |
+----------------------------------------+
| {"k":["v",null]} |
+----------------------------------------+