MariaDB JSON_ARRAY_INSERT() 函数的基础用法与实例

MariaDB JSON_ARRAY_INSERT() 函数是一个用于向 JSON 数组中插入元素的函数。

发布于

MariaDB JSON_ARRAY_INSERT() 函数是一个用于向 JSON 数组中插入元素的函数。它可以接受多个参数,每个参数都是一个键值对,表示要插入的位置和值。该函数返回一个新的 JSON 数组,包含了插入后的元素。如果参数中的位置不是一个有效的 JSON 数组,或者值不是一个有效的 JSON 值,那么该函数会返回 NULL

语法

MariaDB JSON_ARRAY_INSERT() 函数的语法如下:

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

其中:

  • json_doc 是一个 JSON 文档,可以是一个 JSON 字符串,也可以是一个 JSON 列。
  • path 是一个 JSON 路径,用于指定要插入元素的位置。它必须以 $ 开头,表示 JSON 文档的根。它可以使用点号 . 或方括号 [] 来访问 JSON 对象的属性或 JSON 数组的元素。它还可以使用通配符 * 来匹配所有的属性或元素。如果路径不存在,那么该函数会返回 NULL。如果路径指定了一个 JSON 数组的位置,那么可以使用负数来表示从数组的末尾开始计数的索引,比如 -1 表示数组的最后一个元素,-2 表示数组的倒数第二个元素,依此类推。
  • val 是一个 JSON 值,可以是一个基本类型(如字符串,数字,布尔值,NULL),也可以是一个复合类型(如对象,数组)。它表示要插入到 JSON 数组中的值。

实例

下面是一些使用 MariaDB JSON_ARRAY_INSERT() 函数的实例。

向一个简单的 JSON 数组插入一个元素

假设我们有一个 JSON 文档,表示一个水果的列表:

SET @json = '["apple", "banana", "cherry"]';

我们可以使用 MariaDB JSON_ARRAY_INSERT() 函数,向这个 JSON 数组的第二个位置(即索引为 1 的位置)插入一个元素,比如 "orange"

SELECT JSON_ARRAY_INSERT(@json, '$[1]', 'orange') AS result;

运行结果如下:

["apple", "orange", "banana", "cherry"]

向一个嵌套的 JSON 数组插入一个元素

假设我们有一个 JSON 文档,表示一个学生的信息:

SET @json = '{"name": "Alice", "age": 18, "courses": ["Math", "English", "History"]}';

我们可以使用 MariaDB JSON_ARRAY_INSERT() 函数,向这个 JSON 文档中的 courses 数组的第一个位置(即索引为 0 的位置)插入一个元素,比如 "Physics"

SELECT JSON_ARRAY_INSERT(@json, '$.courses[0]', 'Physics') AS result;

运行结果如下:

{"name": "Alice", "age": 18, "courses": ["Physics", "Math", "English", "History"]}

向一个 JSON 数组的多个位置插入多个元素

假设我们有一个 JSON 文档,表示一个电影的评分:

SET @json = '{"title": "The Matrix", "rating": 8.7, "genres": ["Action", "Sci-Fi"]}';

我们可以使用 MariaDB JSON_ARRAY_INSERT() 函数,向这个 JSON 文档中的 genres 数组和根对象分别插入一个元素,比如 "Thriller""year": 1999

SELECT JSON_ARRAY_INSERT(@json, '$.genres[2]', 'Thriller', '$[0]', '{"year": 1999}') AS result;

运行结果如下:

{"title": "The Matrix", "rating": 8.7, "genres": ["Action", "Sci-Fi", "Thriller"]}

向一个不存在的 JSON 数组插入一个元素

假设我们有一个 JSON 文档,表示一个人的信息:

SET @json = '{"name": "Bob", "age": 25}';

我们可以使用 MariaDB JSON_ARRAY_INSERT() 函数,尝试向这个 JSON 文档中的 hobbies 数组的第一个位置(即索引为 0 的位置)插入一个元素,比如 "reading"

SELECT JSON_ARRAY_INSERT(@json, '$.hobbies[0]', 'reading') AS result;

运行结果如下:

{"name": "Bob", "age": 25}

这是因为 hobbies 数组不存在,所以该函数返回源 JSON 值。

相关函数

MariaDB JSON_ARRAY_INSERT() 函数与以下函数有一定的关联:

  • JSON_ARRAY() 函数:用于创建一个 JSON 数组,接受任意数量的参数,作为数组的元素。
  • JSON_ARRAY_APPEND() 函数:用于向 JSON 数组中追加元素,接受多个参数,每个参数都是一个键值对,表示要追加的位置和值。该函数返回一个新的 JSON 数组,包含了追加后的元素。
  • JSON_INSERT() 函数:用于向 JSON 文档中插入元素,接受多个参数,每个参数都是一个键值对,表示要插入的位置和值。该函数返回一个新的 JSON 文档,包含了插入后的元素。该函数与 JSON_ARRAY_INSERT() 函数的区别在于,如果位置是一个 JSON 对象,那么 JSON_INSERT() 函数会将值作为一个属性添加到对象中,而 JSON_ARRAY_INSERT() 函数会返回 NULL

结论

MariaDB JSON_ARRAY_INSERT() 函数是一个用于向 JSON 数组中插入元素的函数。它可以接受多个参数,每个参数都是一个键值对,表示要插入的位置和值。该函数返回一个新的 JSON 数组,包含了插入后的元素。如果参数中的位置不是一个有效的 JSON 数组,或者值不是一个有效的 JSON 值,那么该函数会返回 NULL