Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


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