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

Jackson反序列化JSON字符串时丢失反斜杠问题求助

解决Java反序列化JSON时丢失反斜杠的问题

问题根源

  • Java字符串转义规则冲突:Java中单个反斜杠\是转义字符,直接写\32432会被解析为八进制转义序列,导致反斜杠被消耗,无法传递给Jackson处理。
  • 代码拼写错误:你的代码存在多处拼写失误(如Objectmapper→ObjectMapper、ALLOW_BACKSLASH_ESCAPING_ANY_CAHATCTER→ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER等),导致配置不生效或代码运行异常。

正确解决方案

1. 修正Java字符串写法

JSON中的单个反斜杠,在Java字符串中需要用**双反斜杠\\**表示,同时JSON的双引号需用\"转义,确保原始结构和反斜杠被正确传递:

String json = "{\"num\":\"6787\\32432\"}";

2. 修复Jackson代码的拼写与配置

修正类名、方法名、常量名的拼写错误,正确启用Jackson的反斜杠处理特性:

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        String json = "{\"num\":\"6787\\32432\"}";
        ObjectMapper obj = new ObjectMapper();
        // 启用允许反斜杠转义任意字符的特性
        obj.enable(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER);
        // 反序列化为Map
        Map<String, String> result = obj.readValue(json, new TypeReference<Map<String, String>>() {});
        // 输出结果:6787\32432
        System.out.println(result.get("num"));
    }
}

3. 验证结果

运行上述代码后,result.get("num")的返回值为"6787\32432",反斜杠被成功保留,符合预期。

内容的提问来源于stack exchange,提问作者Asharani Murugesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:48:20