Android application development 第19章:JSONパース(Gson)

🧾 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形式にしたいとき

mh

Related Posts

Android application development 第18章:Retrofitを使ったAPI通信

🌐 Retrofitとは? Retrofit は、HTTP通…

Android application development 第17章:SQLiteとRoomの比較と実装

🧩 SQLiteとRoomの違いは? 項目 SQLite R…

You Missed

Kubernetes Learning 第15章:ServiceとIngressを使った公開

  • 投稿者 mh
  • 5月 19, 2025
  • 5 views

Android application development 第19章:JSONパース(Gson)

  • 投稿者 mh
  • 5月 19, 2025
  • 7 views

Kubernetes Learning 第14章:Webアプリケーションの例 〜Spring Boot + MySQLをKubernetesに載せてみる〜

  • 投稿者 mh
  • 5月 18, 2025
  • 16 views

Android application development 第18章:Retrofitを使ったAPI通信

  • 投稿者 mh
  • 5月 18, 2025
  • 13 views

Kubernetes Learning 第13章:kubectl apply / diff / deleteの運用

  • 投稿者 mh
  • 5月 17, 2025
  • 27 views

Android application development 第17章:SQLiteとRoomの比較と実装

  • 投稿者 mh
  • 5月 17, 2025
  • 26 views