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