我在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