MariaDB JSON_MERGE() 函数使用指南

在 MariaDB 中,JSON_MERGE() 是一个内置函数,用于合并两个或多个 JSON 文档并返回结果。

JSON_MERGE() 已经被弃用, JSON_MERGE_PRESERVE() 是它的同义词。您应该使用 JSON_MERGE_PATCH() 函数。

MariaDB JSON_MERGE() 语法

这里是 MariaDB JSON_MERGE() 的语法:

JSON_MERGE(json1, json2, ...)

参数

json1
必需的。一个 JSON 对象文档。
json2
必需的。一个 JSON 对象文档。

如果您提供了错误数量的参数,MariaDB 将报告一个错误: ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_MERGE'

返回值

MariaDB JSON_MERGE() 函数返回一个由参数指定的多个 JSON 文档合并后的 JSON 文档。JSON_MERGE() 按照如下规则合并多个 JSON 文档:

  • 两个数组合并为一个数组,保留所有数组中的元素。
  • 两个对象合并为一个对象,保留所有的键和值。
  • 一个纯值会被包装成一个数组并作为数组进行合并
  • 对象和数组合并时,会将对象包装到一个数组中并作为数组进行合并。

如果任意一个参数为 NULLJSON_MERGE() 函数将返回 NULL

MariaDB JSON_MERGE() 示例

这里列出了几个常见的 JSON_MERGE() 用法示例。

合并数组

下面的演示了如何使用 JSON_MERGE() 函数合并两个或多个 JSON 数组。

SELECT JSON_MERGE('[1, 2]', '[2, 3]', '[3, 4, 5]');

输出:

+---------------------------------------------+
| JSON_MERGE('[1, 2]', '[2, 3]', '[3, 4, 5]') |
+---------------------------------------------+
| [1, 2, 2, 3, 3, 4, 5]                       |
+---------------------------------------------+

从结果我们可以看出所有数组中的所有元素都被保留下来,不管元素是否重复。并且元素的顺序保持和参数的顺序一致。

合并对象

下面的演示了如何使用 JSON_MERGE() 函数合并两个或多个 JSON 对象。

SELECT JSON_MERGE('{"x": 1}', '{"x": 2, "y": 3}');

输出:

+--------------------------------------------+
| JSON_MERGE('{"x": 1}', '{"x": 2, "y": 3}') |
+--------------------------------------------+
| {"x": [1, 2], "y": 3}                      |
+--------------------------------------------+

这里, 因为 "x": 1"x": 2 的键都是 "x",因此他们的值合并到一个数组中,即: [1, 2]

合并纯值

下面的演示了如何使用 JSON_MERGE() 函数合并两个或多个纯值。

SELECT JSON_MERGE('1', 'true', '"hello"', 'null');

输出:

+--------------------------------------------+
| JSON_MERGE('1', 'true', '"hello"', 'null') |
+--------------------------------------------+
| [1, true, "hello", null]                   |
+--------------------------------------------+

这里,纯值在合并过程中包装成数组处理,因此,他们最终合并到一个数组中。

合并数组和对象

下面的演示了如何使用 JSON_MERGE() 函数合并两个或多个 JSON 对象。

SELECT JSON_MERGE('{"x": 1}', '[1, 2]');

输出:

+----------------------------------+
| JSON_MERGE('{"x": 1}', '[1, 2]') |
+----------------------------------+
| [{"x": 1}, 1, 2]                 |
+----------------------------------+

这里,合并对象和数组时,对象被自动包装成数组,因此,对象和原数组中的元素都被合并到一个新数组中。

结论

在 MariaDB 中,JSON_MERGE() 是一个内置函数,用于合并两个或多个 JSON 文档并返回结果。