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

如何使用Jackson为JSON双引号加转义并反序列化为Map<String,String>

可行实现方案

完全可以实现,核心是区分清楚标准JSON转义和Java字符串字面量转义两个层级的逻辑,你给出的期望输出是两层转义叠加的结果,不是Jackson原生JSON序列化的标准输出,按以下步骤实现即可:

  • 第一步:Jackson原生就支持直接反序列化为Map<String, String>类型,只要输入是合法JSON即可。如果原始JSON里HTML内容的属性双引号没有做JSON层转义导致解析报错,可以开启Jackson的容错解析特性,或者提前预处理原始内容补全JSON层的转义,避免语法歧义。
  • 第二步:要得到你期望的带反斜杠转义的输出,只需要在Jackson完成标准JSON序列化后,再额外做一层Java字符串层面的转义即可,不需要修改Jackson的序列化核心逻辑。你看到的输出里的多反斜杠、长字符串+拼接,分别是二次转义、IDE自动格式化长字符串的效果,不是转义逻辑本身生成的。

核心实现代码

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

public class JacksonEscapeDemo {
    public static void main(String[] args) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();
        // 按需开启容错特性,适配非严格格式的JSON输入
        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
        
        // 原始输入JSON(HTML解码后的实际内容)
        String rawJson = "{\"test1\":\"<p>Please click here <a href=\\\"https://google.com\\\">click here</a> for details</p>\",\"test2\":\"<p><br data-mce-bogus=\\\"1\\\"></p>\"}";
        
        // 直接反序列化为目标Map类型
        Map<String, String> targetMap = objectMapper.readValue(rawJson, new TypeReference<Map<String, String>>() {});
        
        // 先序列化为标准格式JSON
        String standardJson = objectMapper.writeValueAsString(targetMap);
        // 二次转义为Java字符串字面量格式,不需要额外依赖,手动替换即可
        String escapedOutput = standardJson.replace("\\", "\\\\").replace("\"", "\\\"");
        
        // 输出的escapedOutput就是你需要的转义后内容,如果需要按长度拆分为+拼接的格式,自行做字符串截断即可
        System.out.println(escapedOutput);
    }
}

注意事项

  • 如果原始输入的JSON完全没有转义HTML内的双引号(比如href="https://xxx"的双引号直接裸露在JSON值中),本质属于非法JSON格式,开启容错特性也可能存在解析歧义,最稳妥的方式是在生成JSON阶段就对值内的双引号做标准转义,从源头保证JSON合法性。
  • 二次转义的逻辑非常简单,不需要引入第三方依赖,手动替换反斜杠和双引号就可以达到你要的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:27:14