如何在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
相关产品推荐
相关产品推荐

