arrays - SQL Server 2016 JSON : Select array of strings instead of array of objects

标签 arrays sql-server json sql-server-2016

我是 SQL Server 中的 JSON 新手,不知道如何返回简单的字符串数组:

DECLARE @T TABLE ([value] NVARCHAR(MAX))

INSERT INTO @T ([value]) VALUES ('foo')
INSERT INTO @T ([value]) VALUES ('bar')
INSERT INTO @T ([value]) VALUES ('test')
INSERT INTO @T ([value]) VALUES ('ok')

SELECT [value]
FROM @T
FOR JSON PATH

这将返回一个对象数组:

[{"value":"foo"},{"value":"bar"},{"value":"test"},{"value":"ok"}]

我希望它返回:

["foo","bar","test","ok"]

这能做到吗?

最佳答案

以 Loui Bao 和 Roman 的答案为基础:

declare @t table ([value] nvarchar(max))

insert into @t ([value]) values ('foo')
insert into @t ([value]) values ('bar')
insert into @t ([value]) values ('test')
insert into @t ([value]) values ('ok')

SELECT
    JSON_QUERY((SELECT CONCAT('["',STRING_AGG([value], '","'),'"]') FROM @t)) As MuhArray
    OtherValue,
    AnotherValue
FROM MyTableOValues
FOR JSON PATH

这将创建一个简单值的 JSON 有效数组并将其分配给属性 MuhArray。 JSON 输出将是:

[{
  MuhArray: ["foo", "bar", "test", "ok"],
  OtherValue: "Value",
  AnotherValue: "AnotherValue"
}]

其中 OtherValueAnotherValue 接收表中的任何对应值。通过一些摆弄,您还可以选择不将其构建为选择列表中的子查询,而是构建为主查询主体中的简单联接。在我看来,在选择列表中使用子查询可以消除对 distinct 关键字的需要。

关于arrays - SQL Server 2016 JSON : Select array of strings instead of array of objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39453135/

相关文章:

c++ - 使用数组的段错误

ruby - 将数组拆分为一些子数组

sql-server - 如何将自定义桌面应用程序数据库安装到 SQL Express?

jquery - : jQuery 1. 4、ajax/json、Firebug Lite 和 IE 8 组合的错误

Javascript 数组返回未定义

c - 为什么 sizeof() 不返回数组的长度?

python - python 和 json - ValueError : Expecting property name: line 1 column 1 (char 1)

javascript - 将 json 从对象重新制作为数组?

c# - 模型的动态属性

sql-server - 使用触发器来强制数据完整性 - 多余吗?