在 Java 中從 URL 獲取 Json

Haider Ali 2023年10月12日
在 Java 中從 URL 獲取 Json

在本指南中,我們將學習如何在 Java 中從 URL 獲取 JSON。URL 是包含資料的 API,你可以將這些資料轉換為 JSON 以供進一步使用。我們假設你已經熟悉 Java 中 JSON 的基本概念。

在 Java 中從 URL 獲取 JSON

網上有無數的 JSON URL 示例。閱讀本指南後,你還可以訪問此處並測試任何 JSON URL。我們將讀取儲存在此類 API 中的資料,並將它們以 JSON 格式呈現在我們的輸出中。例如,如果我們開啟這個示例 URL (http://ip.jsontest.com/),它會開啟一個網頁,其中包含以下 JSON 格式的輸出。

JSON 示例 - 1

同樣,如果我們使用這個示例 URL (http://headers.jsontest.com/),輸出將如下所示。

JSON 示例 - 2

現在,讓我們看看如何從 URL 中獲取相同的 JSON 格式。我們將採用與上面相同的兩個示例。

程式碼示例:

import java.io.*;
import java.net.*;
import java.nio.charset.*;
import org.json.*;

public static void main(String[] args) throws IOException, JSONException {
  String url = "http://ip.jsontest.com/"; // example url which return json data
  ReadJson reader = new ReadJson(); // To ReadJson in order to read from url.
  JSONObject json = reader.readJsonFromUrl(url); // calling method in order to read.
  System.out.println(json.toString()); // simple for printing.
}

在上面的程式碼示例中,在 main 函式中,我們將 URL 儲存在字串中。為了從 URL 讀取資料,我們建立了一個物件讀取器。我們呼叫了 readJsonFromUrl 方法並將其與物件讀取器整合。讓我們看看魔法發生在哪裡。

readJsonFromUrl 裡面

public JSONObject readJsonFromUrl(String link) throws IOException, JSONException {
  InputStream input = new URL(link).openStream();
  // Input Stream Object To Start Streaming.
  try { // try catch for checked exception
    BufferedReader re = new BufferedReader(new InputStreamReader(input, Charset.forName("UTF-8")));
    // Buffer Reading In UTF-8
    String Text = Read(re); // Handy Method To Read Data From BufferReader
    JSONObject json = new JSONObject(Text); // Creating A JSON
    return json; // Returning JSON
  } catch (Exception e) {
    return null;
  } finally {
    input.close();
  }
}

在上面的函式中,連結被分配給將啟動流處理的輸入。為了從字元輸入流中讀取文字,我們需要緩衝字元以進行高效讀取。瞭解有關緩衝區的更多資訊此處。上面的示例將以 UTF-8 格式進行緩衝。為了從 BufferReader 讀取資料,我們建立了另一個公共函式 Read。

函式內部 Read

public String Read(Reader re) throws IOException { // class Declaration
  StringBuilder str = new StringBuilder(); // To Store Url Data In String.
  int temp;
  do {
    temp = re.read(); // reading Charcter By Chracter.
    str.append((char) temp);

  } while (temp != -1);
  //  re.read() return -1 when there is end of buffer , data or end of file.

  return str.toString();
}

在 Read 中,我們只是使用 do...while 迴圈將 URL 資料儲存在字串中。我們正在逐個讀取字元並將它們儲存在 temp 中。使用型別轉換,我們將所有資料都放在 str 中的字元中。str 作為儲存在 Text 函式 readJsonFromUrl 中的字串被返回。我們使用 JSONObject 建立一個 JSON 並返回它。

要執行上述程式,我們需要使用以下命令。

javac -cp 'org.json.jar' ReadJson.java
java -cp 'org.json.jar' ReadJson.java

示例 URL (http://ip.jsontest.com/) 的輸出如下。

java 從 url 獲取 json - 1

java 從 url 獲取 json - 2

作者: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn