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

Java中移除JSON字符串第一层转义的实现方法咨询

如何用replace()或replaceAll()移除Java字符串的第一层转义并保留嵌套转义?

可以用replaceAll()结合正则表达式实现这个需求,replace()因为只能做字面量替换,无法区分不同层级的转义,所以不适用。

问题回顾

原代码中的字符串定义:

private String jsonString = "{\\\"test\\\":\\\"value \\\\\"ciao\\\\\"  \\\"}"

运行时实际值为:{\"test\":\"value \\\"ciao\\\" \"}
预期处理后结果:{"test":"value \"ciao\" "}

解决方案

核心思路是用正则的负向零宽断言,精准匹配那些仅被转义一次的双引号(即第一层转义的\"),同时跳过被转义两次的情况(\\\",对应最终要保留的\")。

代码示例:

String input = "{\\\"test\\\":\\\"value \\\\\\\"ciao\\\\\\\"  \\\"}"; // 对应运行时的目标输入字符串
String output = input.replaceAll("(?<!\\\\)\\\\\"", "\"");
System.out.println(output); // 输出:{"test":"value \"ciao\"  "}

正则解释

  • (?<!\\\\):负向回顾断言,确保当前匹配位置的前一个字符不是反斜杠,以此排除掉\\\"中已经被转义过的反斜杠+引号组合
  • \\\\\":匹配运行时字符串中的\"(Java字符串里反斜杠需要双重转义,所以正则里的\"在Java代码中要写成\\\\\")
  • 替换为\"对应的实际字符"

这样就能精准移除第一层转义的双引号,同时保留嵌套的转义结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:47:07