SQL Server FOR JSON PATH自动在/前插入\转义的原因咨询
SQL Server FOR JSON PATH 自动为正斜杠添加转义符的原因
问题复现场景
在SQL Server环境中执行以下T-SQL语句,通过FOR JSON PATH生成结构化JSON结果:
Declare @ContractCode nvarchar(100) = N'02/HĐLĐ-NGG'; Declare @DateStartWork date = '2020-06-01'; Declare @DeptID int = 2; Declare @PositionID int = 4; Declare @HRDecisionID int = 614 Select @ContractCode as ContractCode, @DateStartWork as DateStartWork, @DeptID as DeptID, @HRDecisionID as HRDecisionID For Json Path
执行后实际返回的JSON结果中,ContractCode字段内的正斜杠/被自动添加了反斜杠转义:
[{"ContractCode":"02\/HĐLĐ-NGG","DateStartWork":"2020-06-01","DeptID":2,"HRDecisionID":614}]
预期的无转义结果为:
[{"ContractCode":"02/HĐLĐ-NGG","DateStartWork":"2020-06-01","DeptID":2,"HRDecisionID":614}]
转义现象的核心原因
这个行为是SQL Server的默认设计逻辑,不属于功能bug:
- 按照ECMA-404 JSON官方规范,正斜杠
/属于可被合法转义的字符,转义写法\/完全符合JSON标准,所有合规的JSON解析器读取该内容时,都会自动将\/还原为普通正斜杠/,不会导致数据解析异常或内容错乱。 - SQL Server默认开启该转义规则,主要是为了规避Web嵌入场景下的XSS安全风险:如果生成的JSON被直接嵌入HTML的
<script>标签块中,未转义的</script>片段会被浏览器识别为脚本块结束标记,提前截断脚本执行造成注入漏洞,将斜杠转义为\/后即可规避这类问题。
注意:该转义结果本身是合法JSON,绝大多数业务场景不需要额外处理。如果强制要求输出不带转义符的正斜杠,不建议直接全局替换结果中的
\/,避免误替换其他合法转义内容。
内容的提问来源于stack exchange,提问作者Le Anh Xuan
相关产品推荐
相关产品推荐

