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 格式的輸出。

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