MySQL JSON_MERGE() 函数

MySQL JSON_MERGE() 函数合并两个或多个 JSON 文档并返回合并的结果。

JSON_MERGE() 函数和 JSON_MERGE_PRESERVE() 完全相同。

注意:MySQL JSON_MERGE() 函数已经在 MySQL 8.0.3 中弃用,并可能在将来的版本中被删除

JSON_MERGE() 语法

这里是 MySQL JSON_MERGE() 的语法:

JSON_MERGE(json1, json2, ...)

参数

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

返回值

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

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

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

如果任意一个参数不是有效的 JSON 文档,MySQL 将会给出错误。您可以使用 JSON_VALID() 验证 JSON 文档的有效性。

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() 函数合并两个或多个 JSON 对象。

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]                 |
+----------------------------------+

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