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 
版权声明:本文为博主原创文章,转载请附上博文链接!

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 4 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐