You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何移除JSON字符串中的无效转义反斜杠并保留有效转义字符

解决JSON中无效转义反斜杠的问题

首先,咱们得搞清楚你遇到的问题根源:你字符串里的\6在Java里属于八进制转义字符(对应ASCII码6的控制字符),但你实际想要的是把它当作普通的6来处理,同时保留\n\t这类合法的转义字符。之前用StringEscapeUtils.escapeJava没效果,是因为这个工具的作用是给特殊字符添加转义,而不是清理无效的转义,反而会把原有的\6变成\\6,完全不符合你的需求。

解决方案:用正则精准替换无效转义

我们可以用正则表达式匹配那些不是有效转义的反斜杠,然后直接移除它们,同时保留合法的转义(比如\t\n等)。

以下是具体的Java代码实现:

public class FixInvalidJsonEscapes {
    public static void main(String[] args) {
        // 注意:Java字符串里的反斜杠需要转义,所以原字符串里的\6要写成\\6
        String testString = "{\"name\" : \"DROCK\", \"details\" : [{\"age\" : \"23\", \"degree\" : \"BE\", \"Experience\" : \"worked in a company\\6as an intern\"}]}";
        
        // 正则规则:匹配反斜杠,但排除后面跟有效转义字符的情况
        // 有效转义字符包括:\b, \t, \n, \f, \r, \", \', \\
        String fixedString = testString.replaceAll("\\\\(?![btnfr\"'\\\\])", "");
        
        System.out.println(fixedString);
    }
}

正则表达式解释

  • \\\\:在Java字符串中,需要用四个反斜杠来表示一个实际的反斜杠(Java字符串转义一次,正则表达式再转义一次)。
  • (?![btnfr\"'\\\\]):这是负向前瞻断言,意思是:只有当反斜杠后面不是btnfr"'\这些合法转义字符时,才匹配这个反斜杠。
  • 替换为空字符串,就相当于移除了这些无效的反斜杠。

测试效果

运行上面的代码,输出结果正好是你想要的:

{"name" : "DROCK", "details" : [{"age" : "23", "degree" : "BE", "Experience" : "worked in a company6as an intern"}]}

而且如果你的字符串里有\n\t这类合法转义,比如"worked\nin a\tcompany",处理后会保留这些转义,不会被修改。

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

火山引擎 最新活动