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

MariaDB 提供了 JSON_REPLACE() 函数,允许我们在不改变原始结构的情况下替换 JSON 文档中的值。

发布于

在处理 JSON 数据时,经常需要更新 JSON 对象中的值。MariaDB 提供了 JSON_REPLACE() 函数,允许我们在不改变原始结构的情况下替换 JSON 文档中的值。本文将介绍 JSON_REPLACE() 函数的基本用法,并通过实例展示如何在实际场景中使用它。

语法

JSON_REPLACE() 函数的基本语法如下:

JSON_REPLACE(json_doc, path, val[, path, val] ...)
  • json_doc 是一个 JSON 格式的字符串。
  • path 是指向 json_doc 中的元素的路径。
  • val 是要插入或更新到指定路径的值。

如果指定路径不存在,JSON_REPLACE() 不会创建新的元素。如果路径中的一个数组索引超出范围,也不会创建新的元素。

实例

替换 JSON 对象中的值

假设我们有一个 JSON 对象,需要更新其中的一个值。

SET @json = '{"name": "Alice", "age": 25}';
SELECT JSON_REPLACE(@json, '$.age', 26);

输出结果为:

+----------------------------------+
| JSON_REPLACE(@json, '$.age', 26) |
+----------------------------------+
| {"name": "Alice", "age": 26}     |
+----------------------------------+

替换 JSON 数组中的值

如果 JSON 文档是一个数组,我们可以通过索引来替换数组中的元素。

SET @json = '["apple", "banana", "cherry"]';
SELECT JSON_REPLACE(@json, '$[1]', 'orange');

输出结果为:

+---------------------------------------+
| JSON_REPLACE(@json, '$[1]', 'orange') |
+---------------------------------------+
| ["apple", "orange", "cherry"]         |
+---------------------------------------+

替换嵌套 JSON 对象中的值

JSON_REPLACE() 也可以用于嵌套的 JSON 对象。

SET @json = '{"person": {"name": "Alice", "age": 25}}';
SELECT JSON_REPLACE(@json, '$.person.age', 26);

输出结果为:

+------------------------------------------+
| JSON_REPLACE(@json, '$.person.age', 26)  |
+------------------------------------------+
| {"person": {"name": "Alice", "age": 26}} |
+------------------------------------------+

同时替换多个值

我们可以一次替换多个值。

SET @json = '{"name": "Alice", "age": 25, "city": "Paris"}';
SELECT JSON_REPLACE(@json, '$.age', 26, '$.city', 'London');

输出结果为:

+------------------------------------------------------+
| JSON_REPLACE(@json, '$.age', 26, '$.city', 'London') |
+------------------------------------------------------+
| {"name": "Alice", "age": 26, "city": "London"}       |
+------------------------------------------------------+

从表中查询并替换 JSON 值

首先,我们创建一个表并插入数据。

CREATE TABLE users (id INT, profile JSON);
INSERT INTO users VALUES (1, '{"name": "Alice", "age": 25}');

然后,我们可以替换表中的 JSON 数据。

UPDATE users SET profile = JSON_REPLACE(profile, '$.age', 26) WHERE id = 1;

通过下面的语句查看替换后的数据:

SELECT * FROM users WHERE id = 1;
+------+------------------------------+
| id   | profile                      |
+------+------------------------------+
|    1 | {"name": "Alice", "age": 26} |
+------+------------------------------+

相关函数

  • JSON_INSERT(): 在 JSON 文档中添加新的元素。
  • JSON_SET(): 如果路径不存在,则创建新的元素;如果路径存在,则更新值。
  • JSON_REMOVE(): 从 JSON 文档中删除指定路径的元素。

结论

JSON_REPLACE() 函数是处理 JSON 数据时非常有用的工具,它允许我们在保持 JSON 结构不变的情况下更新值。通过上述实例,我们可以看到它在实际应用中的灵活性和便捷性。无论是简单的值替换,还是复杂的嵌套结构更新,JSON_REPLACE() 都能胜任。在处理 JSON 数据时,它是一个不可或缺的函数。