1. 程式人生 > >java 傳送http請求獲得json 以及解析json

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();
        }
    }

執行結果:
這裡寫圖片描述