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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:06:46