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数值类型。

示例

非JSON对象类型合并

sql
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对象

覆盖值:如果第二个对象中有与第一个对象相同的键(x),则第二个对象的值会覆盖第一个对象的值。

sql
SQL> SELECT TO_CHAR(JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "y": 3}'));

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

添加新键:如果第二个对象中有第一个对象中不存在的键,则这些键会被添加到结果对象中。

sql
SQL> SELECT TO_CHAR(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
SQL> SELECT TO_CHAR(JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "z": null}'));

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