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

