MariaDB JSON_MERGE_PATCH() 函数使用指南
在 MariaDB 中,JSON_MERGE_PATCH()
是一个内置函数,它用于合并两个或多个 JSON 文档并返回合并后的结果。
JSON_MERGE_PATCH()
兼容 RFC 7396,用来替代已经弃用的 JSON_MERGE()
。
MariaDB JSON_MERGE_PATCH()
语法
这里是 MariaDB JSON_MERGE_PATCH()
的语法:
JSON_MERGE_PATCH(json1, json2, ...)
参数
json1
- 必需的。一个 JSON 对象文档。
json2
- 必需的。一个 JSON 对象文档。
如果您提供了错误数量的参数,MariaDB 将报告一个错误: ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_MERGE_PATCH'
。
返回值
MariaDB JSON_MERGE_PATCH()
函数返回一个由参数指定的多个 JSON 文档合并后的 JSON 文档。JSON_MERGE_PATCH()
执行的是替换合并,即在相同键值时,只保留后面的值。合并的规则如下:
-
如果第一个参数不是对象,则合并的结果与第二个参数合并空对象的结果相同。
-
如果第二个参数不是对象,则合并的结果为第二个参数。
-
如果两个参数都是对象,则合并的对象具有以下成员:
- 只存在于第一个对象中的成员
- 只存在于第二个对象中且值不是
null
的成员 - 存在于第二个对象且值不是
null
,并且在第一个对象中有对应的相同键的成员
也就是说,只有两个对象合并的结果才是对象。如果两个参数为不同的 JSON 类型或者都不是 JSON 对象,则合并结果是第二个参数。
如果任意一个参数为 NULL
, JSON_MERGE_PATCH()
函数将返回 NULL
。
MariaDB JSON_MERGE_PATCH()
示例
这里列出了几个常见的 JSON_MERGE_PATCH()
用法示例。
非 JSON 对象类型合并
下面的演示了如何使用 JSON_MERGE_PATCH()
函数合并两个非 JSON 对象类型的 JSON 文档。
SELECT
JSON_MERGE_PATCH('2', 'true') AS `2 + true`,
JSON_MERGE_PATCH('true', '2') AS `true + 2`,
JSON_MERGE_PATCH('[1, 2]', '2') AS `[1, 2] + 2`,
JSON_MERGE_PATCH('2', '[1, 2]') AS `2 + [1, 2]`,
JSON_MERGE_PATCH('[1, 2]', '[2, 3]') AS `[1, 2] + [2, 3]`;
输出:
+----------+----------+------------+------------+-----------------+
| 2 + true | true + 2 | [1, 2] + 2 | 2 + [1, 2] | [1, 2] + [2, 3] |
+----------+----------+------------+------------+-----------------+
| true | 2 | 2 | [1, 2] | [2, 3] |
+----------+----------+------------+------------+-----------------+
这里我们看到,两个参数都不是 JSON 对象,JSON_MERGE_PATCH()
函数返回第二个参数。
合并 JSON 对象
下面的演示了如何使用 JSON_MERGE_PATCH()
函数合并两个或多个 JSON 对象。
SELECT JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "y": 3}');
输出:
+----------------------------------------------------------+
| JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "y": 3}') |
+----------------------------------------------------------+
| {"x": 2, "z": 7, "y": 3} |
+----------------------------------------------------------+
若第二个参数中存在值为 null
的键,则该键不会出现结果对象中。
SELECT JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "z": null}');
输出:
+-------------------------------------------------------------+
| JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "z": null}') |
+-------------------------------------------------------------+
| {"x": 2} |
+-------------------------------------------------------------+
结论
在 MariaDB 中,JSON_MERGE_PATCH()
是一个内置函数,它用于合并两个或多个 JSON 文档并返回合并后的结果。