【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;
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()实现完美解码。