如何通过SQL Server生成指定嵌套结构的JSON输出?
修正SQL以生成目标JSON结构
你的问题出在直接将records作为每条记录的嵌套前缀,导致最终输出是一个包含多个records对象的数组。要得到外层为单对象、内部records是客户数组的结构,可以通过子查询构造客户数组,再在外层包装成目标结构来实现。
修正后的SQL代码:
DECLARE @ttCustomer table (cname nvarchar(50), email nvarchar(250)); INSERT @ttCustomer VALUES ('test 1', 'test1@test.com'); INSERT @ttCustomer VALUES ('test 2', 'test2@test.com'); SELECT ( -- 子查询生成每个客户的JSON对象,自动组成数组 SELECT 'customer' AS [attributes.type], cname AS name, email AS email FROM @ttCustomer FOR JSON PATH ) AS records -- 去掉外层默认的数组包裹,得到单对象结构 FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
关键调整说明:
- 内层子查询:负责生成每个客户的JSON结构,使用
[attributes.type]的命名方式嵌套attributes对象,多条记录通过FOR JSON PATH自动组合成数组。 - 外层SELECT:将子查询生成的客户数组赋值给
records字段,再通过WITHOUT_ARRAY_WRAPPER参数取消SQL默认给外层结果添加的数组包裹,最终得到你需要的{"records": [...]}单对象结构。
执行这段代码后,输出就会完全匹配目标JSON格式。
内容的提问来源于stack exchange,提问作者Peter Break
相关产品推荐
相关产品推荐

