如何解决选择用于JSON返回的字符串数组不是对象数组
我有一个格式化为以JSON返回的查询。它返回一个对象数组。
select id,name from [user]
for JSON auto
这是它返回的对象的数组
[{
"id": "0FDF9BCA-1E41-4DA6-B892-0017DE395754","name": "I Accept Answers"
},{
"id": "3E775870-D97A-4B23-B761-00382D932704","name": "Heywood Youhelpme"
},{
"id": "4E775870-D97A-4B23-B761-00382D932704","name": "Geeimiss Xml"
}
]
但是,在大型同类数据集中,对象名称过大。我只想要数据(没有对象名称)。
[
[
"0FDF9BCA-1E41-4DA6-B892-0017DE395754","I Accept Answers"
],[
"3E775870-D97A-4B23-B761-00382D932704","Heywood Youhelpme"
],[
"4E775870-D97A-4B23-B761-00382D932704","Geeimiss Xml"
]
]
我希望将其作为对浏览器端DataTables.js显示的AJAX响应。
我已经看到了几个真正使查询混乱的“真正”混乱的解决方案,我希望“ for JSON”指令中有一些“作为数组”选项或类似的选项。不需要为每个参数提供特殊说明。
解决方法
您可以尝试如下查询,该查询串联使用tsql的QUOTENAME和STRING_AGG函数
select
'[' +
STRING_AGG(CAST(QUOTENAME(QUOTENAME(id,'"')+','+QUOTENAME(name,'"')) AS NVARCHAR(MAX)),',')
+']'
from [user]
这也将起作用
select '['+
STRING_AGG(CAST(CONCAT('["',id,'","',name,'"]') AS NVARCHAR(MAX)),')
+']' from [user]
如果需要使用JSON输出包装器
,则可以尝试使用此方法SELECT REPLACE(REPLACE(REPLACE((select id,name from [user]
for JSON auto),'[{','[['),'}]',']]'),'},{','],[')
,
因此,您正在请求JavaScript解决方案。如果是这样,您可以像这样使用Object.values
:
var json = '[{"id": "0FDF9BCA-1E41-4DA6-B892-0017DE395754","name": "I Accept Answers"},{"id": "3E775870-D97A-4B23-B761-00382D932704","name": "Heywood Youhelpme"},{"id": "4E775870-D97A-4B23-B761-00382D932704","name": "Geeimiss Xml"} ]';
var obj = JSON.parse(json);
var values = Object.keys(obj).map(function (key) { return Object.values(obj[key]); });
console.log(JSON.stringify(values));
如果您需要SQL Server 2017解决方案,FOR JSON
将始终返回JSON对象,因此要拥有数组,您需要手动创建它:
SELECT RESULT = '[' + STRING_AGG( ISNULL('[ "' + id + '","'+ Name '" ]',''),') + ']'
FROM
[user]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。