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 第27章:Logcatの読み方とトラブルシューティング

Android application development 第26章:UIテスト(Espresso)

You Missed

AIエンジニアを目指す人向けの数学・統計 第2章:線形代数の基礎 2.1 ベクトルと行列

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

AIエンジニアを目指す人向けの数学・統計 第1章:AIと数学の関係

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

現場で使えるChrome DevTools実践ガイド 第3章:Elementsパネルを使ったDOM調査と編集

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

Kubernetes Learning 第23章:Horizontal Pod Autoscaler(HPA) 〜負荷に応じてPodの数を自動で調整〜

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

Android application development 第27章:Logcatの読み方とトラブルシューティング

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

現場で使えるChrome DevTools実践ガイド 第2章:DevToolsの起動とレイアウト

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