You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:46:19