java 发送http请求获得json 以及解析json

博主在做一款图书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();
        }
    }

执行结果,我们获得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();
        }
    }

执行结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/Applying/article/details/80900173
今日推荐