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

MariaDB JSON_INSERT() 函数是一个用于向 JSON 文档中插入数据的函数。

发布于

MariaDB JSON_INSERT() 函数是一个用于向 JSON 文档中插入数据的函数。它可以接受三个或更多个参数,第一个参数是一个 JSON 文档,后面的参数是成对的,表示要插入的路径和值。该函数返回一个新的 JSON 文档,包含了插入后的数据。如果参数中有非 JSON 值,或者路径已经存在,那么该函数会返回 NULL

语法

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

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

其中:

  • json_doc 是一个 JSON 文档,可以是一个 JSON 字符串,也可以是一个 JSON 列。
  • path 是一个 JSON 路径,表示要插入的位置。可以指定多个路径,用逗号分隔。
  • val 是一个 JSON 值,表示要插入的值。可以指定多个值,与路径一一对应。

实例

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

向一个简单的 JSON 文档中插入一个属性

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

SET @json = '{"name": "Alice", "age": 18}';

我们可以使用 MariaDB JSON_INSERT() 函数,向这个 JSON 文档中插入一个新的属性,比如 gender

SELECT JSON_INSERT(@json, '$.gender', 'female') AS result;

运行结果如下:

{"name": "Alice", "age": 18, "gender": "female"}

向一个嵌套的 JSON 文档中插入一个元素

假设我们有一个 JSON 文档,表示一个图书馆的藏书:

SET @json = '[{"title": "The Catcher in the Rye", "author": "J.D. Salinger", "year": 1951}, {"title": "Nineteen Eighty-Four", "author": "George Orwell", "year": 1949}]';

我们可以使用 MariaDB JSON_INSERT() 函数,向这个 JSON 文档中的第一个数组元素中插入一个新的属性,比如 genre

SELECT JSON_INSERT(@json, '$[0].genre', 'Novel') AS result;

运行结果如下:

[{"title": "The Catcher in the Rye", "author": "J.D. Salinger", "year": 1951, "genre": "Novel"}, {"title": "Nineteen Eighty-Four", "author": "George Orwell", "year": 1949}]

向一个 JSON 文档中插入多个路径和值

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

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

我们可以使用 MariaDB JSON_INSERT() 函数,向这个 JSON 文档中插入多个路径和值,比如 yeardirector,和 cast

SELECT JSON_INSERT(@json, '$.year', 1999, '$.director', 'The Wachowskis', '$.cast', '["Keanu Reeves", "Laurence Fishburne", "Carrie-Anne Moss"]') AS result;

运行结果如下:

{"title": "The Matrix", "rating": 8.7, "genres": ["Action", "Sci-Fi", "Thriller"], "year": 1999, "director": "The Wachowskis", "cast": "[\"Keanu Reeves\", \"Laurence Fishburne\", \"Carrie-Anne Moss\"]"}

向一个已经存在的路径中插入一个值

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

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

我们可以使用 MariaDB JSON_INSERT() 函数,尝试向这个 JSON 文档中的第一个元素的位置插入一个新的值,比如 "orange"

SELECT JSON_INSERT(@json, '$[0]', 'orange') AS result;

运行结果如下:

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

这是因为这个路径已经存在,所以该函数返回源 JSON 文旦。如果我们想要替换已经存在的值,我们可以使用 JSON_REPLACE() 函数。

向一个非 JSON 值中插入数据

假设我们有一个非 JSON 值,表示一个日期:

SET @json = '2021-02-25';

我们可以使用 MariaDB JSON_INSERT() 函数,尝试向这个值中插入数据:

SELECT JSON_INSERT(@json, '$', '2021-02-26') AS result;

运行结果如下:

+-----------------------------+
| result                      |
+-----------------------------+
| NULL                        |
+-----------------------------+

这是因为这个值不是一个有效的 JSON 文档,所以该函数返回 NULL

相关函数

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

  • JSON_EXTRACT() 函数:用于从 JSON 文档中提取数据的函数。它可以接受一个或多个参数,第一个参数是一个 JSON 文档,后面的参数是一个或多个 JSON 路径,表示要提取的位置。该函数返回一个或多个 JSON 值,对应于匹配的路径。如果参数中有非 JSON 值,或者没有任何路径匹配,那么该函数会返回 NULL
  • JSON_REPLACE() 函数:用于替换 JSON 文档中的数据的函数。它可以接受三个或更多个参数,第一个参数是一个 JSON 文档,后面的参数是成对的,表示要替换的路径和值。该函数返回一个新的 JSON 文档,包含了替换后的数据。如果参数中有非 JSON 值,或者路径不存在,那么该函数会返回 NULL
  • JSON_SET() 函数:用于设置 JSON 文档中的数据的函数。它可以接受三个或更多个参数,第一个参数是一个 JSON 文档,后面的参数是成对的,表示要设置的路径和值。该函数返回一个新的 JSON 文档,包含了设置后的数据。如果参数中有非 JSON 值,那么该函数会返回 NULL。该函数与 JSON_INSERT()JSON_REPLACE() 的区别是,它会根据路径是否存在,自动选择插入或替换的操作。

结论

MariaDB JSON_INSERT() 函数是一个用于向 JSON 文档中插入数据的函数。它可以接受三个或更多个参数,第一个参数是一个 JSON 文档,可以是一个 JSON 字符串,也可以是一个 JSON 列。后面的参数是成对的,表示要插入的路径和值。可以指定多个路径和值,用逗号分隔。 该函数返回一个新的 JSON 文档,包含了插入后的数据。如果参数中有非 JSON 值,或者路径已经存在,那么该函数会返回 NULL