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 第25章:Androidアプリ開発における単体テスト(JUnit)

Android application development 第24章:HiltによるDI導入とその注意点

🔰 Hiltとは? **Hilt(ヒルト)**は、Googl…

You Missed

Kubernetes Learning 第21章:Secretの暗号化とマウント方法 〜機密情報を安全に扱うKubernetesの基本〜

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

Android application development 第25章:Androidアプリ開発における単体テスト(JUnit)

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

Kubernetes Learning 第20章:ConfigMapの詳細 〜アプリケーション設定をKubernetesで管理する〜

  • 投稿者 mh
  • 5月 24, 2025
  • 28 views

Android application development 第24章:HiltによるDI導入とその注意点

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

Kubernetes Learning 第19章:ローカルストレージとクラウドストレージ(EBS, NFSなど)

  • 投稿者 mh
  • 5月 23, 2025
  • 40 views

Android application development 第23章:Javaエンジニアに向けたDIの復習

  • 投稿者 mh
  • 5月 23, 2025
  • 33 views