跳到主要内容

JSON_MERGE_PATCH

描述

该函数依据 RFC 7396 标准对两个或多个 JSON 文档执行合并,并返回合并结果,结果不保留具有重复键的成员。如果某一个参数所传递的文档无效,则会引发错误。

语法

JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)

说明

参数 json_doc 指定需要合并的 JSON 文档。

JSON_MERGE_PATCH() 执行合并的规则如下:

  1. 如果第一个参数不是对象,则将其视为空对象与第二个参数合并作为合并结果。

  2. 如果第二个参数不是对象,则合并结果是第二个参数。

  3. 如果两个参数都是对象,则合并结果是具有以下成员的对象:

    • 第一个对象的所有成员在第二个对象中没有具有相同键的对应成员。

    • 第二个对象的所有成员在第一个对象中没有对应的键,并且其值不是 JSON 的 null 字面量。

    • 所有成员的键都存在于第一个和第二个对象中,并且在第二个对象中的值不是 JSON 的 null 字面量。 这些成员的值是递归合并第一个对象中的值与第二个对象中的值的结果。

示例

SELECT JSON_MERGE_PATCH('[1, 2, 3]', '[true, false]');
+------------------------------------------------+
| JSON_MERGE_PATCH('[1, 2, 3]', '[true, false]') |
+------------------------------------------------+
| [true, false] |
+------------------------------------------------+
1 row in set (0.001 sec)

SELECT JSON_MERGE_PATCH('{"name": "x"}', '{"id": 23}');
+-------------------------------------------------+
| JSON_MERGE_PATCH('{"name": "x"}', '{"id": 23}') |
+-------------------------------------------------+
| {"id": 23, "name": "x"} |
+-------------------------------------------------+
1 row in set (0.001 sec)

SELECT JSON_MERGE_PATCH('1', 'true');
+-------------------------------+
| JSON_MERGE_PATCH('1', 'true') |
+-------------------------------+
| true |
+-------------------------------+
1 row in set (0.001 sec)

SELECT JSON_MERGE_PATCH('[1, 2, 3]', '{"id": 45}');
+---------------------------------------------+
| JSON_MERGE_PATCH('[1, 2, 3]', '{"id": 45}') |
+---------------------------------------------+
| {"id": 45} |
+---------------------------------------------+
1 row in set (0.001 sec)

SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }');
+-----------------------------------------------------------+
| JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }') |
+-----------------------------------------------------------+
| {"a": 3, "b": 2, "c": 4} |
+-----------------------------------------------------------+
1 row in set (0.001 sec)

SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }',NULL);
+--------------------------------------------+
| JSON_MERGE_PATCH('{ "a": 1, "b":2 }',NULL) |
+--------------------------------------------+
| NULL |
+--------------------------------------------+
1 row in set (0.001 sec)

SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }', '{ "a": 5, "d":6 }');
+--------------------------------------------------------------------------------+
| JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }', '{ "a": 5, "d":6 }') |
+--------------------------------------------------------------------------------+
| {"a": 5, "b": 2, "c": 4, "d": 6} |
+--------------------------------------------------------------------------------+
1 row in set (0.001 sec)