MySQL JSON_MERGE_PRESERVE() 函数使用指南
MySQL JSON_MERGE_PRESERVE()
函数合并两个或多个 JSON 文档并返回合并的结果。
此函数和 JSON_MERGE_PATCH()
用法相同,但是合并逻辑有所不同。
JSON_MERGE_PRESERVE()
语法
这里是 MySQL JSON_MERGE_PRESERVE()
的语法:
JSON_MERGE_PRESERVE(json1, json2, ...)
参数
json1
- 必需的。一个 JSON 对象文档。
json2
- 必需的。一个 JSON 对象文档。
返回值
MySQL JSON_MERGE_PRESERVE()
函数返回一个由参数指定的多个 JSON 文档合并后的 JSON 文档。JSON_MERGE_PRESERVE()
按照如下规则合并多个 JSON 文档:
- 两个数组合并为一个数组,保留所有数组中的元素。
- 两个对象合并为一个对象,保留所有的键和值。
- 一个纯值会被包装成一个数组并作为数组进行合并
- 对象和数组合并时,会将对象包装到一个数组中并作为数组进行合并。
如果任意一个参数为 NULL
, JSON_MERGE_PRESERVE()
函数将返回 NULL
。
如果任意一个参数不是有效的 JSON 文档,MySQL 将会给出错误。您可以使用 JSON_VALID()
验证 JSON 文档的有效性。
JSON_MERGE_PRESERVE()
示例
这里列出了几个常见的 JSON_MERGE_PRESERVE()
用法示例。
合并数组
下面的演示了如何使用 JSON_MERGE_PRESERVE()
函数合并两个或多个 JSON 数组。
SELECT JSON_MERGE_PRESERVE('[1, 2]', '[2, 3]', '[3, 4, 5]');
+------------------------------------------------------+
| JSON_MERGE_PRESERVE('[1, 2]', '[2, 3]', '[3, 4, 5]') |
+------------------------------------------------------+
| [1, 2, 2, 3, 3, 4, 5] |
+------------------------------------------------------+
从结果我们可以看出所有数组中的所有元素都被保留下来,不管元素是否重复。并且元素的顺序保持和参数的顺序一致。
合并对象
下面的演示了如何使用 JSON_MERGE_PRESERVE()
函数合并两个或多个 JSON 对象。
SELECT JSON_MERGE_PRESERVE('{"x": 1}', '{"x": 2, "y": 3}');
+-----------------------------------------------------+
| JSON_MERGE_PRESERVE('{"x": 1}', '{"x": 2, "y": 3}') |
+-----------------------------------------------------+
| {"x": [1, 2], "y": 3} |
+-----------------------------------------------------+
这里, 因为 "x": 1
和 "x": 2
的键都是 "x"
,因此他们的值合并到一个数组中,即: [1, 2]
。
合并纯值
下面的演示了如何使用 JSON_MERGE_PRESERVE()
函数合并两个或多个 JSON 对象。
SELECT JSON_MERGE_PRESERVE('1', 'true', '"hello"', 'null');
+-----------------------------------------------------+
| JSON_MERGE_PRESERVE('1', 'true', '"hello"', 'null') |
+-----------------------------------------------------+
| [1, true, "hello", null] |
+-----------------------------------------------------+
这里,纯值在合并过程中包装成数组处理,因此,他们最终合并到一个数组中。
合并数组和对象
下面的演示了如何使用 JSON_MERGE_PRESERVE()
函数合并两个或多个 JSON 对象。
SELECT JSON_MERGE_PRESERVE('{"x": 1}', '[1, 2]');
+-------------------------------------------+
| JSON_MERGE_PRESERVE('{"x": 1}', '[1, 2]') |
+-------------------------------------------+
| [{"x": 1}, 1, 2] |
+-------------------------------------------+
这里,合并对象和数组时,对象被自动包装成数组,因此,对象和原数组中的元素都被合并到一个新数组中。