JSON_SET()

简介

在JSON文档中插入或更新数据并返回结果。

语法

JSON_SET(json_doc, path, val[, path, val] ...)

说明

1. 如果json_doc或path为NULL,则返回NULL。

2. 如果json_doc参数不是有效的JSON文档,或者任何属性参数不是有效的属性表达式,或者包含*或**通配符,则会发生错误。

3. json_doc可进行多次插入或更新,进行了一次插入或更新后的json_doc,将作为下一次插入或更新的新值。

4. JSON_SET遵循以下原则:

(1)不存在于现有对象中的key值。将key值添加到对象中,并与val相关联。

(2)超出现有数组尾部的位置。使用新值扩展数组。如果现有值不是数组,则将其自动包装为数组,然后使用新值进行扩展。

(3)若文档中指定路径下的值已存在,则会使用新值覆盖原有的值。

示例

-- json_doc或path为NULL
SELECT JSON_SET(NULL,'$[1]',1) FROM DUAL;
JSON_SET(json)      |
--------------------
null                |
总数目:1

SELECT JSON_SET('[1,2,3]',NULL,1) FROM DUAL;
JSON_SET(json)      |
--------------------
null                |
总数目:1


-- 多次插入或更新
SELECT JSON_SET('[1,2,3]','$[1]',4,'$[5]',5,'$[2]',6) FROM DUAL;
JSON_SET(json)      |
--------------------
[1, 4, 6, 5]        |
总数目:1


-- 指定路径为不存在的key值
SELECT JSON_SET('{"a":"b"}','$.c','d') FROM DUAL;
JSON_SET(json)      |
--------------------
{"a": "b", "c": "d"}|
总数目:1


-- 指定路径超出数组下标最大值
SELECT JSON_SET('[1,2,3]','$[4]',4) FROM DUAL;
JSON_SET(json)      |
--------------------
[1, 2, 3, 4]        |
总数目:1


-- json_doc为标量值,且路径为数组下标
SELECT JSON_SET('1','$[1]',2) FROM DUAL;
JSON_SET(json)      |
--------------------
[1, 2]              |
总数目:1


-- 替换现有值
SELECT JSON_SET('[1,2,3]','$[1]',4) FROM DUAL;
JSON_SET(json)      |
--------------------
[1, 4, 3]           |
总数目:1