如何调整SQL FOR JSON查询以返回指定格式的JSON数组结果?
解决方案
要生成纯字符串值的JSON数组,你需要修改子查询的写法,让它输出不带键名的数组元素,而非包含OptionValue键的对象结构。
修改后的查询语句
SELECT DISTINCT OptionName, JSON_QUERY( ( SELECT OptionValue AS [*] FROM [TestJSON].[dbo].[Options] WHERE OptionName = o.OptionName FOR JSON PATH ) ) AS [Values] FROM [TestJSON].[dbo].[Options] o WHERE OptionName = 'Gender' FOR JSON PATH
关键修改说明
- 子查询中
SELECT OptionValue AS [*]:使用[*]作为列别名时,SQL Server的FOR JSON PATH会直接将列值作为数组元素,不再包装成{"OptionValue":"值"}的对象。 - 用
DISTINCT替代TOP(1):更严谨地确保每个OptionName只返回一行结果,避免依赖数据行顺序。 - 保留
JSON_QUERY:告知SQL Server子查询生成的是合法JSON内容,不会对其做额外转义,保证最终JSON结构正确。
兼容特殊字符的写法
如果OptionValue可能包含引号、反斜杠等特殊字符,也可以用以下方式(自动处理转义):
SELECT OptionName, JSON_QUERY('["' + STRING_AGG(REPLACE(OptionValue, '"', '\"'), '","') + '"]') AS [Values] FROM [TestJSON].[dbo].[Options] WHERE OptionName = 'Gender' GROUP BY OptionName FOR JSON PATH
内容的提问来源于stack exchange,提问作者Leonvb
相关产品推荐
相关产品推荐

