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

ObjectMapper序列化String类型JSON字段出现转义符的解决方法

问题根因

实体类中json字段定义为String类型时,Jackson的ObjectMapper执行序列化会默认将字符串值按普通文本处理,自动对字符串内部的双引号做转义,不会识别字符串本身承载的JSON结构,最终就会出现带反斜杠转义、字段值被双引号包裹为普通字符串的结果。

可行解决方案
  • 方案1:替换字段类型为JsonNode(生产环境首选,类型安全)
    直接将json字段的类型从String替换为Jackson内置的JsonNode树类型,赋值时提前将JSON字符串解析为JsonNode对象,序列化时会自动按嵌套JSON结构输出,不需要额外配置,也能提前校验JSON格式合法性。
    1. 修改实体类代码:
import com.fasterxml.jackson.databind.JsonNode;

public class ClassSerializable {
  private Long id;
  private JsonNode json;

  // 生成对应getter、setter
  public Long getId() {return id;}
  public void setId(Long id) {this.id = id;}
  public JsonNode getJson() {return json;}
  public void setJson(JsonNode json) {this.json = json;}
}
  1. 赋值与序列化逻辑:
ObjectMapper mapper = new ObjectMapper();
ClassSerializable obj = new ClassSerializable();
obj.setId(7L);
// 把原始JSON字符串解析为JsonNode后赋值
String rawJsonContent = "{\"fieldJson\": {\"one\": 1, \"two\": 1}}";
JsonNode innerJson = mapper.readTree(rawJsonContent);
obj.setJson(innerJson);
// 执行序列化,直接输出无转义的目标结构
String targetJson = mapper.writeValueAsString(obj);
  • 方案2:加@JsonRawValue注解(保留String字段类型时使用)
    如果业务逻辑要求json字段必须保留String类型,直接在字段上添加@JsonRawValue注解,Jackson序列化该字段时会直接输出字符串的原始内容,不做转义、不额外包裹双引号。
    实体类修改示例:
import com.fasterxml.jackson.annotation.JsonRawValue;

public class ClassSerializable {
  private Long id;
  // 声明该字段值按原始JSON内容输出
  @JsonRawValue
  private String json;

  // 生成对应getter、setter
}

注意:使用该方案必须保证存入json字段的字符串是合法JSON格式,否则最终输出的JSON会出现结构语法错误。如果需要支持反序列化时自动把嵌套JSON读为字符串,可以搭配自定义反序列化器实现。

  • 方案3:全局序列化配置(非必要不推荐)
    如果项目中所有存储JSON内容的String字段都需要按原始结构输出,可以给ObjectMapper配置全局String序列化规则,为String类型注册原始值序列化器。但该配置影响范围覆盖所有String字段,容易导致普通文本字符串序列化异常,除非有明确的全局需求,否则不建议使用。

以上方案执行后,序列化输出的结果即为期望的无多余转义的嵌套JSON结构:

{
    "id": 7,
    "json": {
        "fieldJson": {
            "one": 1,
            "two": 1
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:01:14