具有指定格式的表到JSON

时间:2018-05-28 06:29:51

标签: json sql-server tsql sql-server-json

我有以下查询并尝试下面指定的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"
  ]
}

2 个答案:

答案 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_aggjson_queryfor 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"
  ]
}