Gsonを使ってデータをJSONファイルに保存する

Gsonを使用してデータをJSONファイルに保存する

1. 概要

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

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

2. Mavenの依存関係

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


    com.google.code.gson
    gson
    2.8.5

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のシリアル化または逆シリアル化には含まれません。 その結果、nationalityフィールドは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()を呼び出すことができます。 使用可能なオプションはhereにリストされています。

5. 結論

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

いつものように、コードスニペットはthis GitHub repositoryで利用できます。