我有以下查询并尝试下面指定的JSON格式:
SELECT
Convert(VARCHAR(10),[Date],110) HolidayDate
FROM
dbo.Holidays FOR JSON AUTO, ROOT('Holidays')
当前输出
{
"Holidays": [
{
"HolidayDate": "05-21-2018"
},
{
"HolidayDate": "05-22-2018"
},
{
"HolidayDate": "05-26-2018"
}
]
}
预期输出
{
"Holidays": [
"05-21-2018",
"05-22-2018"
]
}
答案 0 :(得分:0)
您可以使用replace
删除不需要的对象属性,只留下一个数组。
select '{"Holidays":' +
select replace(
replace(
(
select convert(varchar(10), [date], 110) HolidayDate
from dbo.Holidays
for json auto
),
'{"HolidayDate":',
''
),
'}',
''
) +
'}'
答案 1 :(得分:0)
在SQL Server 2017中,您可以使用string_agg
,json_query
和for json path
的组合构建结果:
select json_query(QUOTENAME(STRING_AGG('"'
+ STRING_ESCAPE( Convert(VARCHAR(10),[Date],110) , 'json')
+ '"', char(44)))) as Holidays
from dbo.Holidays
for json path , WITHOUT_ARRAY_WRAPPER
在SQL Server 2016中,解决方案不那么优雅,但仍然有效:
declare @cat nvarchar(max)='{"Holidays":'
select @cat = @cat+ QUOTENAME(STRING_AGG('"'
+ STRING_ESCAPE( Convert(VARCHAR(10),[Date],110) , 'json')
+ '"', char(44))) from dbo.Holidays
select @cat + '}'
结果:
{
"Holidays": [
"05-21-2018",
"05-22-2018",
"05-26-2018"
]
}