如何获取JSON未转义值?解决SQL FOR JSON PATH斜杠转义问题
解决SQL Server FOR JSON PATH中转义正斜杠的问题
首先得明确:SQL Server的FOR JSON PATH默认会转义JSON字符串里的特殊字符(包括正斜杠/),这其实是符合JSON规范的——JSON允许转义正斜杠,而且绝大多数JSON解析器都能正确识别转义后的结果。但如果你的业务场景必须要求返回未转义的正斜杠,这里有个可靠的解决思路:
使用JSON_QUERY避免自动转义
JSON_QUERY函数的核心作用是返回一段合法的JSON片段,FOR JSON在处理它的返回值时,会直接把这段JSON嵌入最终结果,不会再对其进行二次转义。我们可以利用这个特性,把目标字段包装成合法的JSON字符串后传入JSON_QUERY:
基础版本(适用于字段值不含双引号的场景)
SELECT JSON_QUERY('"' + lookupvalue + '"') AS 'disk.name' FROM tblDataInfo WHERE lookupkey = 'diskname' FOR JSON PATH;
执行后会返回你想要的未转义结果:
[{"disk":{"name":"/dev/sdb"}}]
健壮版本(处理字段值含双引号的情况)
如果lookupvalue里可能包含双引号(这会破坏我们手动构造的JSON字符串结构),需要先把字段内的双引号转义,再传入JSON_QUERY:
SELECT JSON_QUERY('"' + REPLACE(lookupvalue, '"', '\"') + '"') AS 'disk.name' FROM tblDataInfo WHERE lookupkey = 'diskname' FOR JSON PATH;
补充说明
从JSON规范的角度来说,转义后的\/和未转义的/是完全等价的,绝大多数JSON解析库都会将它们解析为同一个值。如果不是有硬性的格式要求,其实完全不需要处理这种转义——它不会影响数据的正确性。
内容的提问来源于stack exchange,提问作者user3129097
相关产品推荐
相关产品推荐

