如何在Java端修正含未转义特殊字符的无效JSON
问题背景
数据源(数据库)的某一列返回CLOB类型数据,该数据本应是合法JSON,多数情况下确实如此,但在某些场景下可能包含未转义的JSON特殊字符,如\或"。
示例:
{ "appName": "Sample \ "App " Name" }
核心问题
在数据源端修正问题或许是正确方案,但如果无法实现:
- 如何在接收端(Java)修正包含未转义特殊字符的无效JSON?
- 可以通过
String replaced = sourceJson.replace("\\", "\\\\");处理\,但"该如何处理? - 如果只能手动替换,除了
\、"之外,还有哪些字符需要按此方式替换?
已尝试的方案
- 使用
org.apache.commons.lang3.StringEscapeUtils转义源JSON后反序列化
String escapeJson = StringEscapeUtils.escapeJson(sourceJson); Gson gson = new Gson(); MyObject obj = gson.fromJson(escapeJson, MyObject.class); // 抛出异常:com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.appName=null
- 使用
com.fasterxml.jackson.core.io.JsonStringEncoder.getInstance().quoteAsString处理后反序列化
String quotedJson = String.valueOf(JsonStringEncoder.getInstance().quoteAsString(sourceJson)); Gson gson = new Gson(); MyObject obj = gson.fromJson(quotedJson, MyObject.class); // 抛出异常:com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.appName=null
- 与方案1相同,但使用ObjectMapper反序列化
String escapeJson = StringEscapeUtils.escapeJson(sourceJson); ObjectMapper objectMapper = JsonMapper.builder() .enable(JsonReadFeature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS) .build(); MyObject obj = objectMapper.readValue(escapeJson, MyObject.class); // 抛出异常:Unexpected character ('\' (code 92)): was expecting double-quote to start field name
- 与方案2相同,但使用ObjectMapper反序列化
String quotedJson = String.valueOf(JsonStringEncoder.getInstance().quoteAsString(sourceJson)); ObjectMapper objectMapper = JsonMapper.builder() .enable(JsonReadFeature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS) .build(); MyObject obj = objectMapper.readValue(escapeJson, MyObject.class); // 抛出异常:Unexpected character ('\' (code 92)): was expecting double-quote to start field name
研究推论
- 查阅多篇Stack Overflow帖子,但均讨论在数据源端转义字符串的方案
- 目前想到的接收端可行方案是通过正则表达式手动替换字符,替换单个
\较为简单(正则表达式可能为\\),但不知如何替换单个/未终止的"
内容的提问来源于stack exchange,提问作者Cyriac George
相关产品推荐
相关产品推荐

