MariaDB JSON_SET() 函数使用指南
在 MariaDB 中,JSON_SET()
是一个内置函数,它在一个 JSON 文档中插入或更新数据并返回新的 JSON 文档。
JSON_SET()
相当于是 JSON_INSERT()
和 JSON_REPLACE()
的结合。 JSON_INSERT()
只能插入数据,并且 JSON_REPLACE()
只能更新数据。
MariaDB JSON_SET()
语法
这里是 MariaDB JSON_SET()
的语法:
JSON_SET(json, path, value[, path2, value2] ...)
参数
json
- 必需的。被修改的 JSON 文档。
path
- 必需的。一个有效的路径表达式,它不能包含
*
或**
。 value
- 必需的。要设置的数据。
如果您提供了错误数量的参数,MariaDB 将报告一个错误: ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'
。
返回值
MariaDB JSON_SET()
函数在一个 JSON 文档中插入或更新数据并返回新的 JSON 文档。您可以提供多对 path-value
参数,以便一次设定多个数据。
如果 JSON 文档中存在参数中指定的路径,则更新路径匹配的值;如果不存在,则在对应的路径上插入数据。
如果 value
为字符串, JSON_SET()
函数会将其作为字符串写入到 JSON 文档中。
如果 JSON 文档或者路径为 NULL
,此函数将返回 NULL
。
MariaDB JSON_SET()
示例
让我们首先创建一个包含 JSON 对象的 JSON 文档:
SET @obj = '{"x": 1}';
现在让我们设置一些数据:
SELECT JSON_SET(@obj, '$.x', '10', '$.y', '[1, 2]');
输出:
+----------------------------------------------+
| JSON_SET(@obj, '$.x', '10', '$.y', '[1, 2]') |
+----------------------------------------------+
| {"x": "10", "y": "[1, 2]"} |
+----------------------------------------------+
我们发现,虽然已经设置成功,但还有些小问题,就是数组 [1, 2]
变成了 "[1, 2]"
。
这是因为,如果 value
参数为字符串, JSON_SET()
函数会将其作为字符串写入到 JSON 文档中。我们再看一个相似的例子:
SELECT JSON_SET(@obj, '$.x', '10', '$.y', '{"z": 2}');
输出:
+------------------------------------------------+
| JSON_SET(@obj, '$.x', '10', '$.y', '{"z": 2}') |
+------------------------------------------------+
| {"x": "10", "y": "{\"z\": 2}"} |
+------------------------------------------------+
为了解决这个问题,我们可以使用 JSON_EXTRACT()
函数将数据转为 JSON 类型,比如:
SELECT JSON_SET(@obj, '$.x', '10', '$.y', JSON_EXTRACT('[1, 2]', '$'));
输出:
+-----------------------------------------------------------------+
| JSON_SET(@obj, '$.x', '10', '$.y', JSON_EXTRACT('[1, 2]', '$')) |
+-----------------------------------------------------------------+
| {"x": "10", "y": [1, 2]} |
+-----------------------------------------------------------------+
您也可以使用 JSON_QUERY()
或者 JSON_VALUE()
。
结论
在 MariaDB 中,JSON_SET()
是一个内置函数,它在一个 JSON 文档中插入或更新数据并返回新的 JSON 文档。