java 傳送http請求獲得json 以及解析json
阿新 • • 發佈:2018-12-29
博主在做一款圖書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();
}
}
執行結果: