自定义"for json auto"以获得自定义结果



我在SQL Server 中有以下代码

declare @output table ([key] nvarchar(max) , val nvarchar(max))
insert into @output values ('key1' , 'val1' )
insert into @output values ('key2' , 'val2' )
select * from @output for json auto 

返回以下结果:

[{"key":"key1","val":"val1"},{"key":"key2","val":"val2"}]

我想知道是否有任何方法可以将我的json结果更改为类似nelow:的结果

{"Key1": "val1" , "key2": "val2"}

除非使用动态SQL,否则无法使用FOR JSON执行此操作。

然而,只使用STRING_AGG要容易得多。您需要确保使用STRING_ESCAPE正确逃离

SELECT '{' + STRING_AGG('"' + STRING_ESCAPE(o.[key], 'json') + '":"' + STRING_ESCAPE(o.val, 'json') + '"', ',') + '}'
FROM @output o;

注意,如果您想要一个由第三列聚合的JSON数组,比如Id,您可以第二次使用STRING_AGG

SELECT '[' + STRING_AGG(o.obj, ',') + ']'
FROM
SELECT obj = '{"id":"' + STRING_ESCAPE(o.id, 'json') + '",' + STRING_AGG('"' + STRING_ESCAPE(o.[key], 'json') + '":"' + STRING_ESCAPE(o.val, 'json') + '"', ',') + '}'
FROM @output o
GROUP BY Id
) o;

我找到了解决方案:

select '{'+string_agg('"'+[key]+'" : "'+val+'"' ,  ',')+'}' from @output 

最新更新