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

SQL Server使用FOR JSON返回JSON配合Python调用结果异常求助

问题原因

你遇到的返回行数变少的核心是SQL Server的FOR JSON语法的默认返回规则:当生成的JSON字符串总长度超过2033个字符时,SQL Server会自动将JSON拆分为多行返回,每行最多存储2033个字符,你看到的4行实际上是完整JSON被拆分后的4个片段,不是8条数据被合并了。
而搭配without_array_wrapper参数仅返回单条数据的问题,是因为该参数会移除JSON结果外层的数组包裹符[],当存在多条数据时返回的是多个独立JSON对象拼接的非标准格式,解析时只会识别到第一个对象。

解决方案

方案1:SQL层面拼接完整JSON再返回

通过子查询包裹FOR JSON语句,强制SQL Server将所有JSON片段拼接为单个完整字符串,仅返回一行结果:

-- 需要完整JSON数组时使用该语句
SELECT (
    SELECT * FROM mydb FOR JSON AUTO
) AS full_json

Python侧对应代码如下:

import json

cursor.execute(query)
# 取第一行第一列的完整JSON字符串
full_json_str = cursor.fetchone()[0]
# 解析为包含8条数据的Python列表
result = json.loads(full_json_str)

方案2:Python侧直接转换查询结果(更可控)

如果不需要在SQL层面完成JSON转换,更推荐直接查询原生数据,在Python侧完成格式转换,可避开SQL Server的JSON拆分规则限制:

import json

cursor.execute("SELECT * FROM mydb")
# 获取查询字段名
columns = [col[0] for col in cursor.description]
# 将每行数据转为字典,组装为列表
data_list = [dict(zip(columns, row)) for row in cursor.fetchall()]
# 如需JSON字符串可调用json.dumps
json_str = json.dumps(data_list, ensure_ascii=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:06:01