JSON_ARRAY_APPEND()

简介

将给定值追加到JSON数据的指定路径的末尾,并返回结果。

语法

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

说明

1. 如果除val之外的任何参数为NULL,返回NULL。

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

3. path和val可以多次追加,但每一次追加后会产生新的JSON值,下一次计算以新值为基准,原始值会被舍弃。

4. 若指定路径下的值不为一个数组,则会在此路径处构造一个数组,将原始值和给定值都插入到构造好的数组中。

5. 若指定路径不存在,则会返回原数组。

6. 插入值的类型包括:对象,数组,数值,布尔值,null,字符串。

注解

追加数组或者对象时,需要调用json_array()和json_object()。

若不调用这两个函数,追加的数据会被视为字符串。

示例

-- 指定路径为数组时,插入数组
SELECT JSON_ARRAY_APPEND('[1,[1,2],3]', '$[1]', JSON_ARRAY(10,20));
JSON_ARRAY_APPEND(json)      |
-----------------------------
[1, [1, 2, [10, 20]], 3]     |
总数目:1

-- 不调用json_array,被视为字符串
SELECT JSON_ARRAY_APPEND('[1,[1,2],3]', '$[1]', '[10,20]');
JSON_ARRAY_APPEND(json)      |
-----------------------------
[1, [1, 2, "[10,20]"], 3]    |
总数目:1


-- 指定路径为数组时,插入对象
SELECT JSON_ARRAY_APPEND('[1,[1,2],3]', '$[1]', JSON_OBJECT('a','b'));
JSON_ARRAY_APPEND(json)      |
-----------------------------
[1, [1, 2, {"a": "b"}], 3]   |
总数目:1

-- 不调用json_object,被视为字符串
SELECT JSON_ARRAY_APPEND('[1,[1,2],3]', '$[1]', '{"a":"b"}');
JSON_ARRAY_APPEND(json)      |
-----------------------------
[1, [1, 2, "{\"a\":\"b\"}"], |
3]                           |
总数目:1


-- 指定路径为数组时,插入标量值(数值,布尔值,null,字符串)
SELECT JSON_ARRAY_APPEND('[1,[1,2],3]', '$[1]', 5);
JSON_ARRAY_APPEND(json)      |
-----------------------------
[1, [1, 2, 5], 3]            |
总数目:1


-- 指定路径为标量值(数值,布尔值,null,字符串)时,插入数组
SELECT JSON_ARRAY_APPEND('[1,2,3]', '$[1]', JSON_ARRAY(10,20));
JSON_ARRAY_APPEND(json)      |
-----------------------------
[1, [2, [10, 20]], 3]        |
总数目:1

-- 不调用json_array,被视为字符串
SELECT JSON_ARRAY_APPEND('[1,2,3]', '$[1]', '[10,20]');
JSON_ARRAY_APPEND(json)      |
-----------------------------
[1, [2, "[10,20]"], 3]       |
总数目:1


-- 指定路径为标量值(数值,布尔值,null,字符串)时,插入对象
SELECT JSON_ARRAY_APPEND('[1,2,3]', '$[1]', JSON_OBJECT('a','b'));
JSON_ARRAY_APPEND(json)      |
-----------------------------
[1, [2, {"a": "b"}], 3]      |
总数目:1

-- 不调用json_object,被视为字符串
SELECT JSON_ARRAY_APPEND('[1,2,3]', '$[1]', '{"a":"b"}');
JSON_ARRAY_APPEND(json)      |
-----------------------------
[1, [2, "{\"a\":\"b\"}"], 3] |
总数目:1


-- 指定路径为标量值(数值,布尔值,null,字符串)时,插入标量值(数值,布尔值,null,字符串)
SELECT JSON_ARRAY_APPEND('[1,2,3]', '$[1]', 5);
JSON_ARRAY_APPEND(json)      |
-----------------------------
[1, [2, 5], 3]               |
总数目:1