首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >表转换为指定格式的JSON

表转换为指定格式的JSON
EN

Stack Overflow用户
提问于 2018-05-28 14:29:51
回答 2查看 123关注 0票数 1

我有以下查询,并尝试使用下面指定的JSON格式:

代码语言:javascript
复制
SELECT
    Convert(VARCHAR(10),[Date],110) HolidayDate
FROM
    dbo.Holidays FOR JSON AUTO, ROOT('Holidays')

电流输出

代码语言:javascript
复制
{
  "Holidays": [
    {
      "HolidayDate": "05-21-2018"
    },
    {
      "HolidayDate": "05-22-2018"
    },
    {
      "HolidayDate": "05-26-2018"
    }
  ]
}

期望的输出

代码语言:javascript
复制
{
  "Holidays": [
    "05-21-2018",
    "05-22-2018"
  ]
}
EN

回答 2

Stack Overflow用户

发布于 2018-05-28 14:43:35

可以使用replace删除不需要的对象属性,只保留一个数组。

代码语言:javascript
复制
select '{"Holidays":' +
select replace(
    replace(
        (
            select convert(varchar(10), [date], 110) HolidayDate
            from dbo.Holidays
            for json auto
        ),
        '{"HolidayDate":',
        ''
    ),
    '}',
    ''
) +
'}'
票数 0
EN

Stack Overflow用户

发布于 2018-05-28 18:06:03

在SQL Server2017中,您可以组合使用string_aggjson_queryfor json path构建结果

代码语言:javascript
复制
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中,该解决方案不那么优雅,但仍然有效:

代码语言:javascript
复制
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 + '}'

结果:

代码语言:javascript
复制
{
  "Holidays": [
    "05-21-2018",
    "05-22-2018",
    "05-26-2018"
  ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50560350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档