JSON_MERGE_PATCH
📄字数 762
👁️阅读量 加载中...
功能描述
按照 RFC 7396 规范合并两个或更多的 JSON 文本,不保留重复键的成员。
语法格式
sql
JSON_MERGE_PATCH( json_doc, json_doc[, json_doc]... )
输入参数
json_doc
:两个及以上JSON文本,JSON类型或字符类型。
输出结果
JSON类型。任意参数为NULL
时,输出结果为NULL
。
提示
- 以两参数为例,若第一个参数不是对象,合并结果为第二个参数原样值。
- 以两参数为例,若两个参数都为对象,则结果遵守以下规则:
1. 保留第一个对象中所有键不存在于第二个对象中的键值对。
2. 保留第二个对象中所有键不存在于第一个对象中且值不为NULL的键值对,否则该键将在结果中被忽略。
3. 两个对象含有相同的键且第二个对象中的值不为NULL,将保留第二个对象中的键值对。 json_doc
是无效JSON文本将抛出错误。
示例
sql
-- 非JSON对象类型合并
SQL> SELECT JSON_MERGE_PATCH('2', 'true'),
JSON_MERGE_PATCH('true', '2'),
JSON_MERGE_PATCH('[1, 2]', '2'),
JSON_MERGE_PATCH('2', '[1, 2]'),
JSON_MERGE_PATCH('[1, 2]', '[2, 3]');
+-------+-------+-------+--------+--------+
| EXPR1 | EXPR2 | EXPR3 | EXPR4 | EXPR5 |
+-------+-------+-------+--------+--------+
| true | 2 | 2 | [1, 2] | [2, 3] |
+-------+-------+-------+--------+--------+
-- 覆盖值:如果两个对象含有相同的键(x),则第二个对象的值会覆盖第一个对象的值。
SQL> SELECT JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "y": 3}');
+--------------------------+
| EXPR1 |
+--------------------------+
| {"x": 2, "y": 3, "z": 7} |
+--------------------------+
-- 添加新键:如果第二个对象中有第一个对象中不存在的键,则这些键会被添加到结果对象中。
SQL> SELECT JSON_MERGE_PATCH('{"a": null, "b": 1, "e": 5}', '{"c": 2, "f": 6}');
+---------------------------------------------+
| EXPR1 |
+---------------------------------------------+
| {"a": null, "b": 1, "c": 2, "e": 5, "f": 6} |
+---------------------------------------------+
-- 删除键:如果第二个对象中的值为null,则相应的键会被从结果对象中删除。
SQL> SELECT JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "z": null}');
+----------+
| EXPR1 |
+----------+
| {"x": 2} |
+----------+