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
相关产品推荐
相关产品推荐

