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