HOWTO · Java

Java で URL から Json を取得する

Java で URL から Json を取得する方法を理解する

このページの内容

このガイドでは、Java で URL から JSON を取得する方法を学習します。URL は、さらに使用するために JSON に変換できるデータを含む API です。Java での JSON の基本概念に既に精通していることを前提としています。

Java で URL から JSON を取得する

オンラインで利用できる JSONURL サンプルは無数にあります。このガイドを読んだ後、ここにアクセスして JSONURL をテストすることもできます。このような API に保存されているデータを読み取り、JSON 形式で出力に表示します。たとえば、このサンプル URL(http://ip.jsontest.com/)を開くと、JSON 形式で次の出力を持つ Web ページが開きます。

JSON の例-1

同様に、この例の URL(http://headers.jsontest.com/)を使用すると、出力は次のようになります。

JSON の例-2

それでは、URL から同じ JSON 形式を取得する方法を見てみましょう。上記と同じ 2つの例を取り上げます。

コード例:

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 内の文字で取得されます。関数 readJsonFromUrl の Text 内に格納された文字列としての str が返されます。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