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

Java中JSON字符串引号自动转义问题:REST API返回时如何处理?

解决Java后端返回数据库存储的JSON字符串时的转义问题

我来给你梳理几个靠谱的解决方案,先直接说结论:绝对不要用正则表达式去除反斜杠,这是个很容易踩坑的方案,原因后面会详细解释。

方案1:将字符串解析为JSON对象后返回(推荐)

这是最安全、最规范的做法。Java的主流JSON库(比如Jackson、Gson)都能帮你把带转义的字符串解析成原生JSON对象,之后返回给客户端时,框架会自动序列化为正确的无转义JSON。

举个Jackson的代码例子(Spring Boot默认集成Jackson):

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class JsonController {

    @GetMapping("/data")
    public ResponseEntity<JsonNode> getJsonData() {
        // 从数据库取出的带转义的JSON字符串
        String dbJsonString = "{\"key1\": \"value1\", \"key2\": \"value2\"}";
        ObjectMapper objectMapper = new ObjectMapper();
        
        try {
            // 解析为JSON节点
            JsonNode jsonNode = objectMapper.readValue(dbJsonString, JsonNode.class);
            return ResponseEntity.ok(jsonNode);
        } catch (Exception e) {
            // 这里可以处理JSON格式错误的情况,比如数据库存的不是合法JSON
            return ResponseEntity.badRequest().body(null);
        }
    }
}

这个方案的优势在于:

  • 自动处理转义问题,无需手动操作
  • 能校验数据库中存储的JSON是否合法,如果是无效JSON会抛出异常,提前发现问题
  • 后续如果需要修改JSON结构,操作对象比操作字符串方便得多

方案2:直接返回字符串并指定正确的Content-Type

如果能确保数据库中存储的JSON绝对合法,也可以直接返回字符串,但要告诉框架这是JSON类型的响应,避免框架再次对字符串进行转义。

还是以Spring Boot为例:

import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class JsonController {

    @GetMapping(value = "/data", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<String> getJsonData() {
        String dbJsonString = "{\"key1\": \"value1\", \"key2\": \"value2\"}";
        return ResponseEntity.ok(dbJsonString);
    }
}

通过produces = MediaType.APPLICATION_JSON_VALUE指定响应类型为JSON,框架就会把字符串直接作为响应体返回,不会添加额外的转义。

为什么不能用正则去除反斜杠?

正则替换反斜杠看似简单,但存在严重的隐患:如果JSON的值本身包含转义字符(比如值是"user\\name",对应数据库存储的字符串是"{\"key\": \"user\\\\name\"}"),正则去掉所有反斜杠后会变成{"key": "user\name"},这是无效的JSON,客户端解析时会直接报错。

这种场景下,正则无法区分哪些反斜杠是Java字符串的转义,哪些是JSON本身的转义,很容易破坏原始JSON的合法性。


内容的提问来源于stack exchange,提问作者Mr. Nicky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:34:54