HOWTO · Java
在 Java 中從 URL 獲取 Json
瞭解如何從 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 格式的輸出。

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

現在,讓我們看看如何從 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/) 的輸出如下。

