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

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

在MS SQL中合并两个JSON对象的方法

没问题,我来帮你搞定这个JSON合并的需求!下面给你几种靠谱的方法,根据你的SQL Server版本选择就行:

方法1:使用JSON_MODIFY(推荐,兼容SQL Server 2016+)

这个方法适合你已经有两个完整的JSON对象(分别包含Celebrity和Cricketer数组)的情况,通过JSON_MODIFY把第二个对象里的数组添加到第一个对象中:

-- 定义两个原始JSON变量
DECLARE @Celebrity NVARCHAR(MAX) = '{"Celebrity": [ { "Name": "SRK", "Surname": "Kajol" },{ "Name": "Ajay", "Surname": "Devgan" }]}';
DECLARE @Cricketer NVARCHAR(MAX) = '{"Cricketer": [ { "Name": "Virat", "Surname": "Kohli" },{ "Name": "Sachin", "Surname": "Tendulkar" }]}';

-- 合并JSON
SELECT JSON_MODIFY(
    @Celebrity,
    '$.Cricketer', -- 要添加的新属性名
    JSON_QUERY(@Cricketer, '$.Cricketer') -- 获取第二个JSON里的数组(用JSON_QUERY避免转义)
) AS MergedJSON;

这里关键是用JSON_QUERY提取数组,不然SQL会把数组当成普通字符串转义,导致JSON格式错误。

方法2:使用JSON_OBJECT(SQL Server 2022+)

如果你的SQL Server是2022或更高版本,可以直接用JSON_OBJECT构造新的合并JSON,这种方式更直观:

-- 定义两个JSON数组变量
DECLARE @CelebrityArray NVARCHAR(MAX) = '[ { "Name": "SRK", "Surname": "Kajol" },{ "Name": "Ajay", "Surname": "Devgan" }]';
DECLARE @CricketerArray NVARCHAR(MAX) = '[ { "Name": "Virat", "Surname": "Kohli" },{ "Name": "Sachin", "Surname": "Tendulkar" }]';

-- 直接构造合并后的JSON对象
SELECT JSON_OBJECT(
    'Celebrity': JSON_QUERY(@CelebrityArray),
    'Cricketer': JSON_QUERY(@CricketerArray)
) AS MergedJSON;

方法3:字符串拼接(低版本兼容,谨慎使用)

如果你的SQL Server版本低于2016,只能用字符串拼接的方式,但要注意原始JSON的格式必须正确(没有多余的逗号):

DECLARE @Celebrity NVARCHAR(MAX) = '{"Celebrity": [ { "Name": "SRK", "Surname": "Kajol" },{ "Name": "Ajay", "Surname": "Devgan" }]}';
DECLARE @Cricketer NVARCHAR(MAX) = '{"Cricketer": [ { "Name": "Virat", "Surname": "Kohli" },{ "Name": "Sachin", "Surname": "Tendulkar" }]}';

-- 拼接两个JSON:去掉第一个的末尾大括号,加上逗号,再去掉第二个的开头大括号,最后拼接
SELECT CONCAT(
    LEFT(@Celebrity, LEN(@Celebrity) - 1),
    ',',
    RIGHT(@Cricketer, LEN(@Cricketer) - 1)
) AS MergedJSON;

这种方法虽然能工作,但如果原始JSON格式有变化(比如有空格、换行),可能会出错,所以优先用前两种方法。

不管用哪种方法,最终输出的结果都会是你预期的合并后的JSON对象:

{"Celebrity": [ { "Name": "SRK", "Surname": "Kajol" },{ "Name": "Ajay", "Surname": "Devgan" }], "Cricketer": [ { "Name": "Virat", "Surname": "Kohli" },{ "Name": "Sachin", "Surname": "Tendulkar" }]}

内容的提问来源于stack exchange,提问作者Paramita Das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:22:43