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

Java中如何对JSON字符串内嵌套的未转义双引号做转义处理

服务端处理JSON未转义嵌套双引号解决方案

是可以在服务端自行完成转义操作的,但由于这类不符合JSON规范的输入没有统一的解析标准,需要结合你业务的实际数据规则做适配,避免误转。

核心原理

你给出的示例中,合法的JSON结构性双引号(用来包裹键名、值边界的引号)后面,必然紧跟三种字符(中间可能有空白符):

  • 键名后的双引号后面跟:
  • 非末尾值后的双引号后面跟,
  • 末尾值后的双引号后面跟}

只要识别出不属于上述情况的双引号,就是值内部需要转义的嵌套引号,加上反斜杠转义即可得到合法JSON。

两种Java端可行实现方案

方案1:自定义正则预处理(轻量适配)

直接对输入的非法JSON字符串做正则匹配替换,识别出嵌套双引号做转义,示例代码如下:

/**
 * 修复非标准JSON中未转义的嵌套双引号
 * @param invalidJson 输入的非法JSON字符串
 * @return 符合规范的JSON字符串
 */
public static String fixNestedQuotes(String invalidJson) {
    // 匹配后面不是结构性字符的双引号,添加转义符
    return invalidJson.replaceAll("\"(?=\\s*[^:,}])", "\\\\\"");
}

你给出的示例输入经过该方法处理后,会输出符合规范的JSON:
{"id":"101","user":"username","comment":"Example: \"Comment: 123\" test" }
可直接被Jackson、Gson等常规JSON解析库解析。

注意:该方案仅适用于业务值内部不会出现双引号后紧跟, : }的场景,如果你的业务数据存在这类特殊格式,需要调整正则规则。

方案2:使用宽松模式的JSON解析库(优先推荐)

不需要自己编写预处理逻辑,直接开启主流JSON解析库的宽松解析模式,即可自动兼容未转义的嵌套双引号:

Jackson配置示例

ObjectMapper objectMapper = new ObjectMapper();
// 开启宽松解析,兼容未转义引号等非标准格式
objectMapper.enable(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS);
objectMapper.enable(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER);
objectMapper.configure(DeserializationFeature.FAIL_ON_TRAILING_TOKENS, false);

Gson配置示例

// 开启宽松解析模式
Gson gson = new GsonBuilder().setLenient().create();

该方案容错性更高,不需要针对业务规则做额外适配,是首选方案。

注意事项

  • 所有兼容逻辑上线前都需要用历史异常数据做充分测试,避免出现转义错误导致数据失真
  • 服务端预处理只是临时兼容方案,如果条件允许还是建议推动数据提供方严格按照JSON规范输出数据,从根源解决问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:27:01