Skip to content

JSON_MERGE_PATCH

功能描述

合并JSON文本。

语法格式

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

参数说明

json_doc:两个以上JSON文本,JSON类型或JSON String类型。

说明:

  • 如果任何参数为NULL则返回NULL。
  • 若第一个参数不是对象,合并结果就是第二个参数。
  • 若两个参数都为对象,则遵守以下规则: - 第一个对象的所有成员键不存在于第二个对象中。
    - 第二个对象的所有成员键不存在于第一个对象中且值不为null。否则该键将被在结果中忽略。
    - 所有成员键都存在于第一、第二个对象中且第二个对象中的值不为null。否则该键将被在结果中忽略。
  • json_doc不为有效JSON文本将抛出错误。

函数返回类型

JSON数值类型

示例

sql
SQL> SELECT TO_CHAR(JSON_MERGE_PATCH('{"a": null, "b": 1, "e": 5}', '{"c": 2, "b": null, "d": null, "e": 10}'));

EXPR1 | 
------------------------------------------------------------------------------
{"a": null, "c": 2, "e": 10}|

-- 非 JSON 对象类型合并
SQL> SELECT
        TO_CHAR(JSON_MERGE_PATCH('2', 'true')),
        TO_CHAR(JSON_MERGE_PATCH('true', '2')),
        TO_CHAR(JSON_MERGE_PATCH('[1, 2]', '2')),
        TO_CHAR(JSON_MERGE_PATCH('2', '[1, 2]')),
        TO_CHAR(JSON_MERGE_PATCH('[1, 2]', '[2, 3]'));

EXPR1 | EXPR2 | EXPR3 | EXPR4 | EXPR5 | 
------------------------------------------------------------------------------
true| 2| 2| [1, 2]| [2, 3]|

-- 合并两个或多个 JSON 对象
SQL> SELECT TO_CHAR(JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "y": 3}'));

EXPR1 | 
------------------------------------------------------------------------------
{"x": 2, "y": 3, "z": 7}|

-- 若第二个参数中存在值为 null 的键,则该键不会出现结果对象中
SQL> SELECT TO_CHAR(JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "z": null}'));

EXPR1 | 
------------------------------------------------------------------------------
{"x": 2}|