【问题标题】:Special Json Output format特殊的 Json 输出格式
【发布时间】:2019-02-24 01:52:23
【问题描述】:

我使用 SQL Server 2017,我想以JSON 形式将许多记录发送到外部 Web 服务。 我不想为 json 格式的每一行重复列名。
为了减少输出 JSON 的大小,我想将所有 列名 放在第一行,并将 列值 放在另一行。
我想为我的 output json 创建以下结构:

  {
    "data": [
        ["col1name", "col2name", "col3name"],
        ["value1", "value2", "value3"],
        ["value1", "value2", "value3"]
    ]
}

此 json 格式有效并在 jsonlint 上验证
我想在 sql server 中创建这个结构,但我不知道怎么做? 有什么想法吗?

【问题讨论】:

  • 我的问题是如何创建这种json格式。

标签: sql sql-server database


【解决方案1】:

具有讽刺意味的是,我能想到的唯一方法就是使用FOR XML PATH

CREATE TABLE V (Col1 varchar(10), Col2 varchar(10),Col3 varchar(10));
INSERT INTO V    
SELECT *
FROM (VALUES('value1','value2','value3'),
            ('value1','value2','value3')) V(Col1, Col2, Col3);

DECLARE @JSON nvarchar(MAX);

SET @JSON = N'{' + NCHAR(13) + NCHAR(10) +
            N'   "data": [' + NCHAR(13) + NCHAR(10) +
            N'       [' + STUFF((SELECT N', ' + QUOTENAME(c.[name],'"')
                                 FROM sys.columns c
                                      JOIN sys.tables t ON c.object_id = t.object_id
                                 WHERE t.[name] = N'V'
                                 ORDER BY c.column_id ASC
                                 FOR XML PATH(N''),TYPE).value('.', 'varchar(MAX)'),1,2,N'') + N'],' + NCHAR(13) + NCHAR(10) +
            STUFF((SELECT N',' + NCHAR(13) + NCHAR(10) +
                          N'       [' + QUOTENAME(Col1,'"') + N', ' + QUOTENAME(Col2,'"') + N', ' + QUOTENAME(Col3,'"') + N']'
                   FROM V
                   ORDER BY V.Col1
                   FOR XML PATH(N''),TYPE).value('.', 'varchar(MAX)'),1,3,N'') + NCHAR(13) + NCHAR(10) +
            N'    ]' + NCHAR(13) + NCHAR(10) +
            N'}';

PRINT @JSON;

DROP TABLE V;

db<>fiddle

可能有人知道FOR JSON 的方法;但我不确定你能不能,没有一些游戏。

【讨论】:

  • 也许,在 Sql Server 中甚至很困难,因为它已经非常复杂了。
猜你喜欢
  • 1970-01-01
  • 2016-02-27
  • 2013-06-14
  • 2022-11-15
  • 2016-07-25
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
相关资源
最近更新 更多