JSON_APPEND
描述
该函数用于将指定的值附加到 JSON 文档中指定数组的末尾并返回结果。是函数 JSON_ARRAY_APPEND() 的别名。
语法
JSON_APPEND(json_doc, path, val[, path, val] ...)
说明
json_doc 参数用于指定 JSON 文档,path 为路径参数。如果任何参数为 NULL,则返回 NULL。
以下情况都会发生报错:
-
json_doc参数不是有效的 JSON 文档。 -
path参数不是有效的路径表达式。 -
path参数包含 * 或 ** 通配符。
路径值对 path-value 按照从左到右的顺序进行评估。通过评估的 path-value 对所生成的文档作为评估下一对的新值。
如果路径对应的值是一个标量或对象值,则该值将自动包裹在数组中,并将新值添加到该数组中。JSON 文档中未经路径识别所属数组的 path-value 对将被忽略。
示例
-
如下示例中,定义了一个用户变量
@jn,包含一个 JSON 字符串,且该 JSON 字符串表示一个 JSON 数组。SET @jn = '["a", ["b", "c"], "d","e"]';将值
1追加到变量@jn中路径为$[1]的数组尾部。SELECT JSON_APPEND(@jn, '$[1]', 1);这里,
$[1]对应的是 JSON 数组中的第二个元素。返回结果如下:+--------------------------------+
| JSON_APPEND(@jn, '$[1]', 1) |
+--------------------------------+
| ["a", ["b", "c", 1], "d", "e"] |
+--------------------------------+
1 row in set (0.001 sec)将值
2追加到变量@jn中路径为$[0]的数组尾部。SELECT JSON_APPEND(@jn, '$[0]', 2);这里,
$[0]对应的是 JSON 数组中的第一个元素。返回结果如下:+----------------------------------+
| JSON_APPEND(@jn, '$[0]', 2) |
+----------------------------------+
| [["a", 2], ["b", "c"], "d", "e"] |
+----------------------------------+
1 row in set (0.001 sec)由于
["b", "c"]是一个数组,我们可以将值3追加到变量@jn中路径为$[1][0]的数组尾部。SELECT JSON_APPEND(@jn, '$[1][0]', 3);返回结果如下:
+----------------------------------+
| JSON_APPEND(@jn, '$[1][0]', 3) |
+----------------------------------+
| ["a", [["b", 3], "c"], "d", "e"] |
+----------------------------------+
1 row in set (0.001 sec) -
如下示例中,定义了一个用户变量
@jemp,包含一个 JSON 字符串,且该 JSON 字符串表示一个对象。该对象中包含三个键值对:"a"的值是数字1;"b"的值是一个包含数字2和3的数组;"c"的值是数字4。SET @jemp = '{"a": 1, "b": [2, 3], "c": 4}';将字符串
x追加到变量@jemp中路径为$.b的数组尾部。SELECT JSON_APPEND(@jemp, '$.b', 'x');这里,
$.b表示"b"键对应的数组。返回结果如下:+------------------------------------+
| JSON_APPEND(@jemp, '$.b', 'x') |
+------------------------------------+
| {"a": 1, "b": [2, 3, "x"], "c": 4} |
+------------------------------------+
1 row in set (0.001 sec)同样,将字符串
y追加到变量@jemp中路径为$.c的数组尾部。SELECT JSON_APPEND(@jemp, '$.c', 'y');这里,
$.c表示"c"键对应的数组。返回结果如下:+--------------------------------------+
| JSON_APPEND(@jemp, '$.c', 'y') |
+--------------------------------------+
| {"a": 1, "b": [2, 3], "c": [4, "y"]} |
+--------------------------------------+
1 row in set (0.001 sec) -
如下示例中,定义了一个用户变量
@temp,包含一个简单的 JSON 对象。在该对象中,键是"a",值是数字5。SET @temp = '{"a": 5}';将字符串
z追加到变量@temp中路径为$的数组尾部。SELECT JSON_APPEND(@temp, '$', 'z');需要注意的是,指定路径为
$,其表示的是 JSON 文档的根级别,也就是整个 JSON 对象,而不是向 JSON 对象中添加键值对。返回结果如下:+------------------------------+
| JSON_APPEND(@temp, '$', 'z') |
+------------------------------+
| [{"a": 5}, "z"] |
+------------------------------+
1 row in set (0.001 sec)