sql - SQL Server 2016 中的 FOR JSON
问题描述
有什么方法可以在 SQL Server 2016 中使用 FOR JSON 返回以下给定格式的 JSON 数据?
{
"draw": 1,
"recordsTotal": 57,
"recordsFiltered": 57,
"data":
[
{
"first_name": "Airi",
"last_name": "Satou",
"position": "Accountant",
"office": "Tokyo",
"start_date": "28th Nov 08",
"salary": "$162,700"
}
]
}
尝试了以下查询。但没有得到想要的输出 -
SELECT
1 AS draw
,100 AS recordsTotal
,10 AS recordsFiltered
,(SELECT
first_name
,last_name
,position
,office
,start_date
,salary
FROM Employees
FOR JSON PATH,ROOT('Employees'),INCLUDE_NULL_VALUES)
下面给出的查询正确地给出了输出,但无法将列“draw”、“recordsFiltered”和“totalRows”附加到 JSON -
SELECT
first_name
,last_name
,position
,office
,start_date
,salary
FROM Employees
FOR JSON PATH,ROOT('Employees'),INCLUDE_NULL_VALUES
解决方案
这应该与虚拟表源完全相同sys.objects
(顺便说一句:始终尝试通过提供带有一些数据的表或使用每个人都可以使用的通用系统表来创建一个工作的独立示例)
SELECT
1 AS draw
,100 AS recordsTotal
,10 AS recordsFiltered
,(
SELECT TOP 3
o.object_id
,o.name
FROM sys.objects o
FOR JSON PATH,INCLUDE_NULL_VALUES
) AS [data]
FOR JSON PATH;
内部SELECT
将创建一个对象数组并调用它"data"
。外部SELECT
将把所有这些放在一起。
结果
[
{
"draw":1,
"recordsTotal":100,
"recordsFiltered":10,
"data":[
{
"object_id":3,
"name":"sysrscols"
},
{
"object_id":5,
"name":"sysrowsets"
},
{
"object_id":6,
"name":"sysclones"
}
]
}
]
暗示
您可能想阅读WITHOUT_ARRAY_WRAPPER来控制数组括号...
推荐阅读
- r - 使用 xts 的 period.apply() 时的第一天问题
- java - 服务器/多客户端程序不会向所有客户端发送消息
- vector - c++ 中 const 对象或 const 对象的迭代器类型
- c - Socket Programming C,接收消息是从以前的消息中继承的
- django - 如何将模型数据显示到html页面
- python - 实现魔术python方法时是否需要担心线程安全?
- javascript - JS:调整画布大小+在画布上重绘元素
- vba - VBA HTML 抓取错误“对象变量或未设置变量”
- windows - perl CPAN 中 WMI 源代码的路径(在命令提示符中)
- javascript - 为什么我需要在 node-postgres 中使用 async/await 两次