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

Jackson ObjectMapper writeValueAsBytes额外添加反斜杠问题的解决咨询

Jackson序列化反斜杠的问题解析与解决办法

这个问题我之前也碰到过,其实是Jackson严格遵循JSON规范的默认行为导致的——在JSON语法里,反斜杠\是特殊转义字符,必须写成\\才能被JSON解析器正确识别,所以Jackson默认会帮你把字符串里的单个反斜杠转成双反斜杠,确保生成的JSON是合法的。

但如果你的业务场景确实不需要这种转义(比如要生成非标准的自定义格式),可以通过以下几种方式实现需求:

方法1:全局配置ObjectMapper禁用反斜杠转义

你可以直接修改ObjectMapper的配置,关闭反斜杠的自动转义功能。注意不同Jackson版本的配置项略有区别:

public static void main(String[] args) throws JsonProcessingException, UnsupportedEncodingException {
    ObjectMapper mapper = new ObjectMapper();
    // Jackson 2.10及以上版本用这个配置
    mapper.disable(JsonGenerator.Feature.ESCAPE_BACKSLASH);
    // 如果你用的是更新的Jackson版本,也可以尝试WriterFeature:
    // mapper.disable(WriterFeature.ESCAPE_BACKSLASH);

    Map<String, String> data = new HashMap<>();
    data.put("id", "Test\\String");
    System.out.println("data[id] that has single backslash: " + data.get("id"));
    
    byte[] dataInBytes = mapper.writeValueAsBytes(data);
    System.out.println("data in bytes without double backslash: " + new String(dataInBytes, "UTF-8"));
    // 此时输出会是:{"id":"Test\String"}
}

方法2:针对单个字段使用@JsonRawValue注解

如果你不想全局修改配置,只想让某个特定字段输出原始字符串(不转义),可以给该字段加上@JsonRawValue注解:

// 先定义一个实体类
class Data {
    @JsonRawValue
    private String id;

    // 生成getter和setter方法
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
}

// 测试代码
public static void main(String[] args) throws JsonProcessingException, UnsupportedEncodingException {
    ObjectMapper mapper = new ObjectMapper();
    Data data = new Data();
    data.setId("Test\\String");
    
    byte[] dataInBytes = mapper.writeValueAsBytes(data);
    System.out.println(new String(dataInBytes, "UTF-8"));
    // 输出:{"id":"Test\String"}
}

重要提醒

需要注意的是,禁用反斜杠转义后生成的内容不再是标准JSON,因为单个反斜杠在JSON中属于非法字符。如果后续这个字节数组需要用标准JSON解析器解析,会直接报错。所以只有当你确认接收方不需要按标准JSON处理,或者有自定义的解析逻辑时,才建议使用这些方法。

内容的提问来源于stack exchange,提问作者Abh Swar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:57:22