You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中合并两个JSON对象?

合并SQL表中的两个JSON对象

直接用字符串拼接的方式容易引发格式错误、键冲突处理不当等问题,更可靠的方案是利用数据库原生的JSON函数实现。以下是主流数据库的具体实现方式:

PostgreSQL

PostgreSQL 针对jsonb类型提供了jsonb_concat函数,可直接合并多个JSON对象:

SELECT jsonb_concat(
    '{"abc":"value1", "xyz":"value2"}'::jsonb,
    '{"pqr":"value3"}'::jsonb
) AS merged_json;

如果是json类型,先转成jsonb再合并即可。若存在重复键,后面的对象会覆盖前面的键值。

MySQL

MySQL 8.0+ 支持两种合并函数,可按需选择:

  • JSON_MERGE_PRESERVE:保留所有键,重复键会生成数组(值不同时)
SELECT JSON_MERGE_PRESERVE(
    '{"abc":"value1", "xyz":"value2"}',
    '{"pqr":"value3"}'
) AS merged_json;
  • JSON_MERGE_PATCH:后面的对象覆盖前面的重复键
SELECT JSON_MERGE_PATCH(
    '{"abc":"value1", "xyz":"value2"}',
    '{"pqr":"value3"}'
) AS merged_json;

你的场景中两者都能得到目标结果,推荐用JSON_MERGE_PATCH处理潜在的键冲突。

SQL Server

SQL Server 2022+ 简洁写法

借助JSON_OBJECT_AGG和OPENJSON实现合并:

SELECT JSON_OBJECT_AGG([key], [value]) AS merged_json
FROM (
    SELECT [key], [value] FROM OPENJSON('{"abc":"value1", "xyz":"value2"}')
    UNION ALL
    SELECT [key], [value] FROM OPENJSON('{"pqr":"value3"}')
) AS combined;

兼容旧版本的写法

用JSON_MODIFY逐个合并键值:

DECLARE @json1 NVARCHAR(MAX) = '{"abc":"value1", "xyz":"value2"}';
DECLARE @json2 NVARCHAR(MAX) = '{"pqr":"value3"}';

SELECT JSON_MODIFY(
    @json1,
    CONCAT('$."', [key], '"'),
    [value]
) INTO #temp
FROM OPENJSON(@json2);

SELECT TOP 1 * FROM #temp;
DROP TABLE #temp;

不推荐字符串拼接的原因

直接用字符串函数拼接(比如去掉第二个JSON的{,替换第一个JSON的}为,xxx})存在诸多问题:

  • 若JSON包含嵌套结构、转义字符,会直接破坏格式
  • 无法合理处理键重复的情况,易生成无效JSON
  • 代码可读性差,后续维护成本高

内容的提问来源于stack exchange,提问作者shadaab farhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:20:23