VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

JSON_MERGE_PATCH

功能描述

JSON_MERGE_PATCH函数用于合并两个及以上的JSON,相同键值保留后者JSON对象键值成员。

注意事项

  • 该功能仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。
  • 若任一参数为NULL,则之前的参数和该参数的合并结果为NULL。
  • 合并规范:
    • 若相邻的两个JSON参数都是对象,则合并结果为单个对象。
    • 若一个JSON对象的某一成员键在另一个JSON对象中没有重复,则在合并结果中保留该成员。
    • 若前一个JSON对象的某一成员键在后一个JSON对象中重复,则在合并结果中,保留后者JSON对象中重复键成员。特别地,当后一个相同键对应对象成员的value为NULL时,在结果中删除该键成员。
    • 若相邻的两个JSON参数存在一个参数不是对象,则合并的结果直接为第二个JSON参数。
    • 若任一参数为NULL,则位于该参数之前的参数和该参数的合并结果为 NULL。
    • NULL参数后面一个参数若非NULL,则:
      • 后面参数为数组、scalar,合并结果为后面参数本身。
      • 后面参数为对象,合并结果为NULL。

标量(scalar):单一的数字、bool、string、null都可以叫做标量。

语法格式

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

参数说明

json_doc

JSON文档,它可以是一个JSON字符串,或者一个JSON列。

示例

SELECT json_merge_patch('{"a":1}', '{"b":2}');
SELECT json_merge_patch(NULL, '[1,2,3]');
SELECT json_merge_patch('{"a":{"b":"abc"}}', '{"a":{"b":null}}');

返回结果为:

 json_merge_patch
------------------
 {"a": 1, "b": 2}
(1 row)

 json_merge_patch
------------------
 [1, 2, 3]
(1 row)

 json_merge_patch
------------------
 {"a": {}}
(1 row)