DataContractJsonSerializer序列化时转义正斜杠能否避免?
解决序列化时正斜杠被自动转义的问题
嘿,这个问题我碰到过好多次了!很多序列化库默认会把正斜杠/转成\/——虽说这符合JSON规范(规范允许转义正斜杠),但确实看着冗余,而且完全可以避免。下面分几种常用的技术场景给你解决方案:
1. JavaScript/Node.js 场景
如果用原生的JSON.stringify,可以通过自定义replacer函数来还原被转义的正斜杠:
const originalStr = "http://abc"; const serialized = JSON.stringify(originalStr, (key, value) => { // 只处理字符串类型,把转义后的\/替换回/ return typeof value === 'string' ? value.replace(/\\\//g, '/') : value; }); console.log(serialized); // 输出 "http://abc"
要是用第三方库(比如fast-json-stringify、ajv),通常会自带escapeSlash: false这类配置项,直接开启就能关闭正斜杠转义。
2. Python 场景
Python 3.9及以上版本的json模块新增了escape_forward_slashes参数,直接设为False即可:
import json data = "http://abc" result = json.dumps(data, escape_forward_slashes=False) print(result) # 输出 "\"http://abc\""
如果是Python 3.9以下版本,默认就不会转义正斜杠,要是你遇到了转义的情况,大概率是用了第三方序列化库,去查对应的配置开关就行。
3. Java(Jackson库)场景
Jackson默认会转义正斜杠,只需要配置ObjectMapper关闭对应的特性:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.core.JsonGenerator; public class SerializeExample { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); // 关闭正斜杠转义 mapper.configure(JsonGenerator.Feature.ESCAPE_FORWARD_SLASHES, false); String result = mapper.writeValueAsString("http://abc"); System.out.println(result); // 输出 "\"http://abc\"" } }
通用思路
不管用什么语言或库,核心逻辑都是两个:
- 优先找序列化库的配置项,一般都有专门控制是否转义正斜杠的开关,这是最稳妥的方式;
- 如果库没有提供配置,就在序列化完成后,把结果里的
\/全局替换回/——注意一定要在序列化后处理,别提前改原字符串,避免破坏其他需要转义的特殊字符。
内容的提问来源于stack exchange,提问作者whatever
相关产品推荐
相关产品推荐

