【Java】用Java实现JS中的decodeURIComponent()函数

为防止json数据解析出错,在B/S模式下的前后端交互中,会对数据进行编码encodeURIComponent与解码decodeURIComponent。
存储时将数据编码:encodeURIComponent(需要编码的数据)
使用时将数据解码:decodeURIComponent(需要解码的数据)

在爬取数据的过程中,对于使用AJAX进行页面数据渲染的网页,我们爬取到的数据往往会是下面的形式:
data:%7B%22mode%22%3A%22xml%22%2C%22code%22%3A%22%20%20%20%20%20%20%20%20%3Cdependency%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3CgroupId%3Eorg.springframework.boot%3C%2FgroupId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3CartifactId%3Espring-boot-configuration-processor%3C%2FartifactId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Coptional%3Etrue%3C%2Foptional%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdependency%3E%5Cn%5Cn%5Cn%20%3Cbuild%3E%5Cn%20%20%20%20%20%20%20%20%3Cplugins%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cplugin%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CgroupId%3Eorg.springframework.boot%3C%2FgroupId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CartifactId%3Espring-boot-maven-plugin%3C%2FartifactId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cconfiguration%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cexcludes%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cexclude%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CgroupId%3Eorg.springframework.boot%3C%2FgroupId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CartifactId%3Espring-boot-configuration-processor%3C%2FartifactId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fexclude%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fexcludes%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fconfiguration%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fplugin%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fplugins%3E%5Cn%20%20%20%20%3C%2Fbuild%3E%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22Wptpj%22%7D
在Java项目中,我们又该如何去对这种原内容为json数据的字符串进行解码呢?
网上的处理方法较多,但下面的方法最为简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.born2do.code;

/**
* @author chenhy
* @date 2021/3/25
*/
public class DecodeDemo {
public static void main(String[] args) throws Exception {
String uri = "%7B%22mode%22%3A%22xml%22%2C%22code%22%3A%22%20%20%20%20%20%20%20%20%3Cdependency%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3CgroupId%3Eorg.springframework.boot%3C%2FgroupId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3CartifactId%3Espring-boot-configuration-processor%3C%2FartifactId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Coptional%3Etrue%3C%2Foptional%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdependency%3E%5Cn%5Cn%5Cn%20%3Cbuild%3E%5Cn%20%20%20%20%20%20%20%20%3Cplugins%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cplugin%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CgroupId%3Eorg.springframework.boot%3C%2FgroupId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CartifactId%3Espring-boot-maven-plugin%3C%2FartifactId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cconfiguration%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cexcludes%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cexclude%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CgroupId%3Eorg.springframework.boot%3C%2FgroupId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CartifactId%3Espring-boot-configuration-processor%3C%2FartifactId%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fexclude%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fexcludes%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fconfiguration%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fplugin%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fplugins%3E%5Cn%20%20%20%20%3C%2Fbuild%3E%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22Wptpj%22%7D";
String decodeStr = new java.net.URI(uri).getPath();
System.out.println("decode后的json数据为:" + decodeStr);
}
}

运行结果:

decode后的json数据为:{“mode”:”xml”,”code”:” \n org.springframework.boot\n spring-boot-configuration-processor\n true\n \n\n\n \n \n \n org.springframework.boot\n spring-boot-maven-plugin\n \n \n \n org.springframework.boot\n spring-boot-configuration-processor\n \n \n \n \n \n “,”heightLimit”:true,”margin”:true,”id”:”Wptpj”}

我们再将获取到的结果进行格式化,显示如下:

1
2
3
4
5
6
7
{
"mode": "xml",
"code": " <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-configuration-processor</artifactId>\n <optional>true</optional>\n </dependency>\n\n\n <build>\n <plugins>\n <plugin>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-maven-plugin</artifactId>\n <configuration>\n <excludes>\n <exclude>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-configuration-processor</artifactId>\n </exclude>\n </excludes>\n </configuration>\n </plugin>\n </plugins>\n </build>",
"heightLimit": true,
"margin": true,
"id": "Wptpj"
}

使用getPath()实现完美解码。