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)