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

SQL Server中如何将FOR JSON PATH生成的JSON结果作为字符串返回

SQL Server 生成带外层引号包裹的JSON字符串方案

问题复现

测试用表结构与初始代码:

DECLARE @T TABLE ([value] NVARCHAR(MAX))

INSERT INTO @T ([value]) VALUES ('foo')
INSERT INTO @T ([value]) VALUES ('bar')

SELECT [value]
FROM @T
FOR JSON PATH
  • 直接执行默认返回结果:[{"value":"foo"},{"value":"bar"}]
  • 目标返回格式:整体被双引号包裹的字符串形式,示例为"[{'SS':'foo'},{'SS':'bar'}]"

实现方案

方案1:变量接收后手动拼接(适配任意场景)

将FOR JSON PATH生成的结果存入变量,按需替换内部引号后在外层包裹双引号即可,可直接匹配目标格式:

DECLARE @T TABLE ([value] NVARCHAR(MAX))
DECLARE @jsonResult NVARCHAR(MAX)

INSERT INTO @T ([value]) VALUES ('foo')
INSERT INTO @T ([value]) VALUES ('bar')

-- 生成JSON时给列起别名匹配示例中的SS键名
SELECT @jsonResult = (
    SELECT [value] AS SS
    FROM @T
    FOR JSON PATH
)

-- 外层包裹双引号,按需将内部双引号替换为单引号
SELECT '"' + REPLACE(@jsonResult, '"', '''') + '"' AS WrappedResult

执行后返回结果完全匹配目标格式:

"[{'SS':'foo'},{'SS':'bar'}]"

如果需要输出符合RFC标准的JSON字符串,去掉REPLACE逻辑直接拼接外层引号即可,返回的"[{""SS"":""foo""},{""SS"":""bar""}]"可被所有标准JSON解析器正常识别。

方案2:JSON函数自动转义(适配嵌套JSON场景)

如果需要将该字符串作为其他JSON结构的属性值,可使用JSON_QUERY配合FOR JSON自动完成转义包裹,无需手动处理引号:

DECLARE @T TABLE ([value] NVARCHAR(MAX))

INSERT INTO @T ([value]) VALUES ('foo')
INSERT INTO @T ([value]) VALUES ('bar')

SELECT 
    JsonStrCol = JSON_QUERY((SELECT [value] AS SS FROM @T FOR JSON PATH))
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

提示:标准JSON规范要求字符串边界、内部键/值的引号必须为双引号,将内部引号替换为单引号的写法无法被通用JSON解析器识别,仅在有特殊业务对接要求时使用。


内容的提问来源于stack exchange,提问作者JB's

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:06:24