🧾 Gsonとは?
Gson(GoogleのJSONライブラリ)は、
JSON ↔ Javaオブジェクト を簡単・安全・高速に変換してくれるライブラリです。
Javaで toJson()
や fromJson()
といった直感的なメソッドを使って、
シリアライズ(オブジェクト → JSON)、デシリアライズ(JSON → オブジェクト)ができます。
📦 Gradleでの導入
dependencies {
implementation 'com.google.code.gson:gson:2.10.1'
}
🔄 基本の使い方
① Javaオブジェクト → JSON へ変換(シリアライズ)
class User {
String name;
int age;
}
User user = new User();
user.name = "Taro";
user.age = 25;
Gson gson = new Gson();
String json = gson.toJson(user); // {"name":"Taro","age":25}
② JSON → Javaオブジェクト へ変換(デシリアライズ)
String json = "{\"name\":\"Taro\",\"age\":25}";
Gson gson = new Gson();
User user = gson.fromJson(json, User.class);
System.out.println(user.name); // "Taro"
System.out.println(user.age); // 25
fromJson()
メソッドに JSON文字列と 対応するクラス を渡すだけでOK!
💡 特徴と便利な点
特徴 | 説明 |
---|---|
① 非常に軽量で速い | Android向けに最適化されている |
② アノテーションで制御できる | @SerializedName などで柔軟にマッピング可能 |
③ List や Map の変換も簡単 | 型付きのコレクションにも対応 |
④ Retrofitと組み合わせることが多い | Web API通信 → 自動でJavaオブジェクトに変換できる |
🔤 JSONキーとJavaフィールド名が異なるとき
class User {
@SerializedName("user_name")
String name;
@SerializedName("user_age")
int age;
}
JSON:
{
"user_name": "Taro",
"user_age": 25
}
@SerializedName
アノテーションを使えば、JSONキーとJavaフィールド名が違っていてもOK!
🔁 List や Map の変換
String json = "[{\"name\":\"Taro\",\"age\":25},{\"name\":\"Hanako\",\"age\":30}]";
Type userListType = new TypeToken<List<User>>(){}.getType();
List<User> users = gson.fromJson(json, userListType);
※ Javaの型情報は型消去されてしまうため、TypeToken
を使って明示的に型を渡します。
⚠️ 注意点
注意点 | 説明 |
---|---|
privateフィールドは無視される | デフォルトでは public や package-private のフィールドのみ対象 |
デフォルトコンストラクタが必要 | new してフィールドに値を入れるため、空のコンストラクタが必要です |
日付や時刻の扱いに注意 | Java 8以降の LocalDateTime などは少し工夫が必要です |
✅ まとめ
Gsonはこんなときに便利! |
---|
✅ Web APIのJSONレスポンスをJavaに変換したいとき |
✅ オブジェクトの内容をログとして出力したいとき |
✅ ファイル保存やキャッシュ用途でJSON形式にしたいとき |