Java で JSON を解析する

Siddharth Swami 2023年10月12日
  1. Java で json.simple ライブラリを使用して JSON を解析する
  2. Java で org.json ライブラリを使用して JSON を解析する
  3. Java で gson ライブラリを使用して JSON を解析する
  4. Java で JsonPath ライブラリを使用して JSON を解析する
Java で JSON を解析する

JSON は、データを保存および転送するための軽量でテキストベースの言語です。これは JavaScript のオブジェクトに基づいています。JSON は、オブジェクトと配列の 2つの構造化タイプを表します。

このチュートリアルでは、さまざまな方法を使用して Java で JSON を解析する方法を示します。

この例では、次の JSON ファイルを使用します。

{
    "firstName": "Ram",
    "lastName": "Sharma",
    "age": 26
    },

    "phoneNumbers": [
        {
            "type": "home",
            "phone-number": "212 888-2365"
        }
    ] 
}

Java で json.simple ライブラリを使用して JSON を解析する

最初の方法は、json.simple ライブラリを使用して Java で JSON を解析することです。java.simple ライブラリから、org.json.simple.JSONArrayorg.json.simple.JSONObject の 2つのクラスをインポートする必要があります。

JSONArray は配列の形式で要素を解析するのに役立ち、JSONObject は JSON テキストに存在するオブジェクトを解析するのに役立ちます。

次の例は、このメソッドの使用法を示しています。

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;

public class JSONsimple {
  public static void main(String[] args) throws Exception {
    // parsing file "JSONExample.json"
    Object ob = new JSONParser().parse(new FileReader("JSONFile.json"));

    // typecasting ob to JSONObject
    JSONObject js = (JSONObject) ob;

    String firstName = (String) js.get("firstName");
    String lastName = (String) js.get("lastName");

    System.out.println("First name is: " + firstName);
    System.out.println("Last name is: " + lastName);
  }
}

出力:

First name is: Ram
Ladt name is: Sharma

上記の例では、システムにすでに存在する JSON ファイルを読み取り、そこから、そのファイルの名前と名前の属性を出力しています。

ここで、org.json.simple.parser.*にある JSONParser().parse() 関数は、ファイルから JSON テキストを解析します。ここでの js.get() メソッドは、ファイルから firstNamelastName の値を取得します。

Java で org.json ライブラリを使用して JSON を解析する

このライブラリは、ファイルから読み取るのではなく、JSON 文字列を直接読み取るための静的メソッドを提供します。getJSONObject および getJSONArray メソッドは、作業をより簡単にし、ユーザーが入力した文字列から必要な入力を提供します。また、前の例のように、オブジェクトを JSONObject にタイプキャストする必要はありません。

以下のコードを参照してください。

import org.json.JSONArray;
import org.json.JSONObject;

public class JSON2 {
  static String json = "{\"contacDetails\": {\n" + // JSON text is written here
      "            \"firstName\": \"Ram\",\n"
      + "            \"lastName\": \"Sharma\"\n"
      + "    },\n"
      + "    \"phoneNumbers\": [\n"
      + "            {\n"
      + "                \"type\": \"home\",\n"
      + "                \"phone-number\": \"212 888-2365\",\n"
      + "            }\n"
      + "    ]"
      + "}";
  public static void main(String[] args) {
    // Make a object
    JSONObject ob = new JSONObject(json);

    // getting first and last name
    String firstName = ob.getJSONObject("contacDetails").getString("firstName");
    String lastName = ob.getJSONObject("contacDetails").getString("lastName");
    System.out.println("FirstName " + firstName);
    System.out.println("LastName " + lastName);

    // loop for printing the array as phoneNumber is stored as array.
    JSONArray arr = obj.getJSONArray("phoneNumbers");
    for (int i = 0; i < arr.length(); i++) {
      String post_id = arr.getJSONObject(i).getString("phone-number");
      System.out.println(post_id);
    }
  }
}

出力:

FirstName Ram
LastName Sharma
212 888-2365

Java で gson ライブラリを使用して JSON を解析する

このライブラリも追加でダウンロードする必要があります。com.google.gson.JsonArraycom.google.gson.JsonObjectcom.google.gson.JsonParser の 3つのクラスを gson ライブラリからインポートする必要があります。

静的文字列とファイルの両方を使用して JSON を解析できます。入力を取得するためのメソッド名は、前のメソッド名とは少し異なります。オブジェクトデータを取得するには、getAsJsonObject() を使用し、配列入力には、getAsJsonArray() を使用します。

以下のコードを参照してください。

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class GsonMethod {
  static String json = "{\"contacDetails\": {\n" + // JSON text is written here
      "            \"firstName\": \"Ram\",\n"
      + "            \"lastName\": \"Sharma\"\n"
      + "    },\n"
      + "    \"phoneNumbers\": [\n"
      + "            {\n"
      + "                \"type\": \"home\",\n"
      + "                \"phone-number\": \"212 888-2365\",\n"
      + "            }\n"
      + "    ]"
      + "}";
  public static void main(String[] args) {
    // Make an object
    JsonObject ob = new JsonParser().parse(json).getAsJsonObject();

    // getting first and last name
    String firstName = ob.getAsJsonObject("contacDetails").get("firstName");
    String lastName = ob.getAsJsonObject("contacDetails").get("lastName");
    System.out.println("FirstName " + firstName);
    System.out.println("LastName " + lastName);

    // loop for printing the array as phoneNumber is stored as array.
    JsonArray arr = obj.getAsJsonArray("phoneNumbers");
    for (int i = 0; i < arr.length(); i++) {
      String PhoneNumber = arr.getAsJsonObject(i).get("phone-number");
      System.out.println(PhoneNumber);
    }
  }
}

出力:

FirstName Ram
LastName Sharma
212 888-2365

Java で JsonPath ライブラリを使用して JSON を解析する

このライブラリでは、データ入力を取得するために read() メソッドを使用します。JSON テキストを呼び出すためにここでオブジェクトを作成する必要はありません。このために com.jayway.jsonpath.JsonPath クラスをインポートします。

次の例は、この方法を示しています。

import com.jayway.jsonpath.JsonPath;

public class PathMethod {
  static String json = "{\"contacDetails\": {\n" + // JSON text is written here
      "            \"firstName\": \"Ram\",\n"
      + "            \"lastName\": \"Sharma\"\n"
      + "    },\n"
      + "    \"phoneNumbers\": [\n"
      + "            {\n"
      + "                \"type\": \"home\",\n"
      + "                \"phone-number\": \"212 888-2365\",\n"
      + "            }\n"
      + "    ]"
      + "}";
  public static void main(String[] args) {
    // getting input
    String firstName = JsonPath.read(json, "$.contactDetails.firstName");
    System.out.println("FirstName " + firstName);
    String lastName = JsonPath.read(json, "$.contactDetails.lastName");
    System.out.println("LastName " + lastName);

    Integer phoneNumbers = JsonPath.read(json, "$.phoneNumbers.length()");

    for (int i = 0; i < phoneNumbers; i++) {
      String number = JsonPath.read(json, "$.phoneNumber[" + i + "].phone-number");
      System.out.println(number);
    }
  }
}

出力:

FirstName Ram
LastName Sharma
212 888-2365

関連記事 - Java JSON