Android替换JSON转义字符

Posted newchenxf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android替换JSON转义字符相关的知识,希望对你有一定的参考价值。

1 问题背景

A同学收到B同学传递来的json数据,带了转义字符,例如:

\\"key\\":1,\\"data\\":\\"type\\":2,\\"value\\":\\"testtest\\"

如果只是想查看数据,那找个网站,去除转义即可,例如
Json转义网站

但是,如果你需要代码层面去除转义,并且还不想依赖第三方库怎么办?

2 解决办法

使用String类的replaceAll方法。具体而言:
String.replaceAll("\\\\\\\\", "")

测试代码:

public class HelloWorld 
 static String test = "\\"key\\":1,\\"data\\":\\"type\\":2,\\"value\\":\\"testtest\\"";
    public static void main(String []args) 
  String aa = test.replaceAll("\\\\\\\\", "");
       System.out.println("result : \\n" + aa);
    

以上代码,可以直接找个java在线测试平台验证,例如:菜鸟工具Java在线运行

3 详细解释

答案给出了,现在来我们具体展开说一下

3.1 replaceAll函数

语法

public String replaceAll(String regex, String replacement)

参数

regex – 匹配此字符串的正则表达式。
replacement – 用来替换每个匹配项的字符串。

返回值

成功则返回替换的字符串,失败则返回原始字符串。

3.2 解释

为什么只是去除一个斜杠,需要regex等于四个斜杠呢?

根据 JAVA语言的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式才能受到保护,不被 Java 字节码编译器解释。
在其他的语言中(如 python),一个反斜杠 \\ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在 Java 的正则表达式中,两个 \\\\ 代表其他语言中的一个 \\

所以上面四个\\\\\\\\, 实际只有2个\\。第一个是转义,第二个是实际字符,最终是匹配一个真正的\\字符。

综上,要替换json string的转义字符\\,可以用String.replaceAll("\\\\\\\\", "")的方法。

4 参考

java正则表达式

以上是关于Android替换JSON转义字符的主要内容,如果未能解决你的问题,请参考以下文章

Android替换JSON转义字符

PHP前台提交json,双一号被转义了,json有一万字符,JS无法替换处理

对JSON.parse()中存在转义字符的解决以及js中替换函数replace()的认识

将文字反斜杠后跟一个字符转换为相应的转义序列

Delphi中JSON回车换行符转义

golang——json的html标签转义问题