1. 概要

Gson は、JavaオブジェクトをJSON表現に変換できるようにするJavaライブラリです。 逆に使用して、JSON文字列を同等のJavaオブジェクトに変換することもできます。

このクイックチュートリアルでは、さまざまなJavaデータ型をJSONとしてファイルに保存する方法を説明します。

2. Mavenの依存関係

まず、pom.xmlにGson依存関係を追加する必要があります。 これはMavenCentralで利用できます。

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

3. JSONファイルへのデータの保存

GsonクラスのtoJson(Object src、Appendable writer)メソッドを使用して、Javaデータ型をJSONに変換し、ファイルに保存します。 Gson()コンストラクターは、デフォルト構成でGsonオブジェクトを作成します。

Gson gson = new Gson();

これで、 toJson ()を呼び出してJavaオブジェクトを変換および保存できます。

Javaでさまざまなデータ型の例をいくつか見てみましょう。

3.1. プリミティブ

プリミティブをJSONファイルに保存するのは、GSONを使用すると非常に簡単です。

gson.toJson(123.45, new FileWriter(filePath));

ここで、filePathはファイルの場所を示します。 ファイル出力には、プリミティブ値が含まれているだけです。

123.45

3.2. カスタムオブジェクト

同様に、オブジェクトをJSONとして保存できます。

まず、単純なUserクラスを作成します。

public class User {
    private int id;
    private String name;
    private transient String nationality;

    public User(int id, String name, String nationality) {
        this.id = id;
        this.name = name;
        this.nationality = nationality;
    }
    
    public User(int id, String name) {
        this(id, name, null);
    }
}

次に、UserオブジェクトをJSONとして保存します。

User user = new User(1, "Tom Smith", "American");
gson.toJson(user, new FileWriter(filePath));

ファイルの出力は次のようになります。

{"id":1,"name":"Tom"}

フィールドがtransientとマークされている場合、デフォルトでは無視され、JSONのシリアル化または逆シリアル化には含まれません。 その結果、国籍フィールドはJSON出力に存在しません。

また、デフォルトでは、Gsonはシリアル化中にnullフィールドを省略します。 したがって、この例を検討すると、次のようになります。

gson.toJson(new User(1, null, "Unknown"), new FileWriter(filePath));

ファイル出力は次のようになります。

{"id":1}

シリアル化にnullフィールドを含める方法については後で説明します。

3.3. コレクション

同様の方法でオブジェクトのコレクションを保存できます。

User[] users = new User[] { new User(1, "Mike"), new User(2, "Tom") };
gson.toJson(users, new FileWriter(filePath));

この場合、ファイル出力はUserオブジェクトの配列になります。

[{"id":1,"name":"Mike"},{"id":2,"name":"Tom"}]

4. GsonBuilderを使用する

デフォルトのGson構成設定を微調整するために、GsonBuilderクラスを利用できます。

このクラスはビルダーパターンに従い、通常、最初にさまざまな構成メソッドを呼び出して目的のオプションを設定し、最後に create()メソッドを呼び出すことによって使用されます。

Gson gson = new GsonBuilder()
  .setPrettyPrinting()
  .create();

ここでは、デフォルトでfalseに設定されているきれいな印刷オプションを設定しています。 同様に、シリアル化にnull値を含めるには、 serializeNulls()を呼び出すことができます。 利用可能なオプションはここにリストされています。

5. 結論

この簡単な記事では、さまざまなJavaデータ型をJSONファイルにシリアル化する方法を理解しました。 JSONに関するさまざまな記事を調べるには、このトピックに関する他のチュートリアルをご覧ください。

いつものように、コードスニペットはこのGitHubリポジトリで入手できます。