SQL Server JSON查询报错:JSON格式异常排查与解决请求
问题原因分析
错误Msg 13609, Level 16, State 4明确指向位置447的双引号"是非法字符,核心原因是这条JSON数据格式不规范:
- 要么是该位置的双引号未正确转义(字符串内部的双引号必须用
\转义,比如"content:\"test\""而不是"content:"test"") - 要么是JSON结构出现了多余/缺失的双引号,比如键名没被双引号包裹、字符串未正确闭合
排查步骤
- 先找出所有格式无效的JSON记录:
SELECT report_json, LEN(report_json) FROM [dbo].[clia_report] WHERE ISJSON(report_json) = 0ISJSON()函数会直接返回0标记格式错误的行 - 定位错误位置的具体内容:
对找到的错误行,截取位置447前后的片段查看细节:
这样能直观看到错误点附近的JSON结构,判断是转义问题还是结构错误SELECT SUBSTRING(report_json, 400, 100) FROM [dbo].[clia_report] WHERE ISJSON(report_json) = 0
解决办法
根据排查结果针对性处理:
- 若是未转义的双引号:修正该字段里的非法引号,比如把字符串内的
"替换为\",示例语句:UPDATE [dbo].[clia_report] SET report_json = REPLACE(report_json, '错误的"内容"', '修正后的\"内容\"') WHERE 你的筛选条件 -- 务必定位到具体错误行,别批量瞎改 - 若是结构错误:直接修正对应位置的JSON结构,确保所有键名用双引号包裹,字符串首尾闭合正确
- 预防后续问题:以后插入或更新JSON数据时,别手动拼接字符串,用正规的JSON序列化工具生成合法JSON(比如C#的Newtonsoft.Json、Python的json模块),从源头避免格式错误
内容的提问来源于stack exchange,提问作者user13444194
相关产品推荐
相关产品推荐

