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

如何将SQL两列查询结果转换为单键值对JSON对象

解决方案:将两列SQL结果转为单个JSON对象

要实现把FormField列作为键、Value列作为对应值,生成单个JSON对象的需求,你可以根据场景选择以下几种方法:

方法1:字符串拼接(简单场景,无特殊字符)

如果你的FormField和Value中不包含引号、反斜杠等JSON特殊字符,直接用STRING_AGG拼接键值对,再包裹成JSON结构即可:

SELECT '{' + STRING_AGG('"' + FormField + '": "' + Value + '"', ',') + '}' AS SingleJSON
FROM FormsData

方法2:带特殊字符转义的字符串拼接

如果字段值里存在双引号、反斜杠这类特殊字符,必须用STRING_ESCAPE处理后再拼接,避免生成无效JSON:

SELECT '{' + STRING_AGG(
    '"' + STRING_ESCAPE(FormField, 'json') + '": "' + STRING_ESCAPE(Value, 'json') + '"',
    ','
) + '}' AS SingleJSON
FROM FormsData

方法3:动态SQL + PIVOT(适用于动态字段)

如果FormField的取值是动态不固定的,推荐用动态SQL结合PIVOT先将行转成列,再生成单个JSON对象:

DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX)

-- 收集所有FormField值作为列名
SELECT @columns = STRING_AGG('[' + FormField + ']', ',') FROM FormsData

-- 构造动态SQL,行转列后生成JSON
SET @sql = N'
SELECT ' + @columns + '
FROM FormsData
PIVOT (
    MAX(Value) FOR FormField IN (' + @columns + ')
) AS PivotedData
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
'

EXEC sp_executesql @sql

为什么你原来的语句不行?

你之前的SELECT FormField, Value FROM FormsData FOR JSON PATH会把每一行数据转换成一个独立的JSON对象(比如{"FormField":"Name","Value":"Jhon"}),然后自动包裹成数组。加上WITHOUT_ARRAY_WRAPPER也只是去掉数组外层的[],得到的是多个对象的拼接(而非单个合并对象),所以不符合需求。

内容的提问来源于stack exchange,提问作者Steve Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:30:50