跳到主要内容

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" 的值是一个包含数字 23 的数组;"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)

相关文档

JSON_ARRAY_APPEND