java 发送http请求获得json 以及解析json
https://blog.csdn.net/Applying/article/details/80900173
博主在做一款图书app的后台,最近遇到的一个需求:
前端向后端返回图书的isbn码,后端向前端返回该isbn对应图书的信息,例如书名、作者、出版社、简介等。
后端实现的逻辑:
读取isbn码,判断是否为空,为空则报错
查看数据库是否有与该isbn匹配的图书信息,如果有则直接返回
如果没有,则利用豆瓣开发者工具,进行查找,通过对接收到的信息进行解析,并插入到数据库中
前两步都没有问题,问题就在于第三步,我们需要完成:
在java代码中,发送http的请求,以获取图书的信息
豆瓣开发者工具返回的是JSON格式的文件,因此,我们需要将JSON格式的文件进行解析
这两个问题也是比较常见的问题,我这里将分两个部分分别介绍:
1.发送http请求
public static void temp(String isbn) throws IOException{
// 我们需要进行请求的地址:
String temp = "https://api.douban.com/v2/book/isbn/" + isbn;
try {
// 1.URL类封装了大量复杂的实现细节,这里将一个字符串构造成一个URL对象
URL url = new URL(temp);
// 2.获取HttpURRLConnection对象
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
// 3.调用connect方法连接远程资源
connection.connect();
// 4.访问资源数据,使用getInputStream方法获取一个输入流用以读取信息
BufferedReader bReader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8"));
// 对数据进行访问
String line = null;
StringBuilder stringBuilder = new StringBuilder();
while ((line = bReader.readLine()) != null) {
stringBuilder.append(line);
}
// 关闭流
bReader.close();
// 关闭链接
connection.disconnect();
// 打印获取的结果
System.out.println(stringBuilder.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
执行结果,我们获得Json包
2.解析JSON包
网上有不少文章在解释如何利用现成的jar包进行解析JSON文件的时候,很多都没有注明用了什么包,都是直接贴代码,看得一头雾水。
https://blog.csdn.net/m0_37568521/article/details/78795029
上面的连接是昨天看到的,一个博主贴出了使用了什么包
我将这6个包导入后,顺利实现了简单的转换:
public static void temp(String isbn) throws IOException{
// 我们需要进行请求的地址:
String temp = "https://api.douban.com/v2/book/isbn/" + isbn;
try {
// 1.URL类封装了大量复杂的实现细节,这里将一个字符串构造成一个URL对象
URL url = new URL(temp);
// 2.获取HttpURRLConnection对象
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
// 3.调用connect方法连接远程资源
connection.connect();
// 4.访问资源数据,使用getInputStream方法获取一个输入流用以读取信息
BufferedReader bReader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8"));
// 对数据进行访问
String line = null;
StringBuilder stringBuilder = new StringBuilder();
while ((line = bReader.readLine()) != null) {
stringBuilder.append(line);
}
// 关闭流
bReader.close();
// 关闭链接
connection.disconnect();
// 打印获取的结果
System.out.println(stringBuilder.toString());
// 将获得的String对象转为JSON格式
JSONObject jsonObject = JSONObject.fromObject(stringBuilder.toString());
// 通过利用JSON键值对的key,来查询value
System.out.println("book name : " + jsonObject.get("subtitle").toString());
System.out.println("author : " + jsonObject.get("author").toString());
System.out.println("summary : " + jsonObject.get("summary").toString());
// 对于value也是JSON的对象,将对象的value转为一个新的JSON继续进行
JSONObject aObject = JSONObject.fromObject(jsonObject.get("images").toString());
System.out.println("images: " + aObject.get("small").toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
执行结果:
---------------------
作者:parallel_1996
来源:CSDN
原文:https://blog.csdn.net/Applying/article/details/80900173
版权声明:本文为博主原创文章,转载请附上博文链接!
更多推荐
所有评论(0)