JSON_INSERT()

简介

将数据插入JSON并返回结果。

语法

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

说明

1. 如果json_doc参数不是有效的JSON,或者任何路径参数不是有效的路径表达式,或者路径中包含*或**通配符,会发生错误。

2. val可以多次插入,但每一次插入后会产生新的JSON值,下一次计算以新值为基准。

3. 对于文档中不存在的path,JSON_INSERT分为以下几种情况进行插入:

(1)若指定路径下的值为一个对象,且指定的路径不是已存在的key值,那么将路径作为key值与val相关联,并添加到对象中。

(2)若指定路径下的值为一个数组,且path超出数组下标最大值,使用新值扩展数组。如果现有值不是数组,则将其自动包装为数组,然后使用新值进行扩展。

(3)否则,对文档中不存在的路径插入值将被忽略,并且不会对json_doc产生任何影响。

示例

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

SELECT JSON_INSERT('{"a":{"a":"b"}}','$.a.c','d') FROM DUAL;
JSON_INSERT(json)      |
-----------------------
{"a": {"a": "b", "c": "|
d"}}                   |
总数目:1


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

SELECT JSON_INSERT('[1,2,3]','$[10]',5) FROM DUAL;
JSON_INSERT(json)      |
-----------------------
[1, 2, 3, 5]           |
总数目:1


-- 指定路径下为不为数组,但path为数组下标,将现有值包装为数组
SELECT JSON_INSERT('1','$[1]',2) FROM DUAL;
JSON_INSERT(json)      |
-----------------------
[1, 2]                 |
总数目:1


-- 指定路径下已存在值
SELECT JSON_INSERT('[1,2,3]','$[1]',5) FROM DUAL;
JSON_INSERT(json)      |
-----------------------
[1, 2, 3]              |
总数目:1

SELECT JSON_INSERT('{"a":"b"}','$.a','jkl') FROM DUAL;
JSON_INSERT(json)      |
-----------------------
{"a": "b"}             |
总数目:1


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