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 第33章:実践ミニアプリ:天気情報アプリ

Android application development 第32章:実践ミニアプリ:シンプルなToDoリスト

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 9 views

Kubernetes Learning 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

  • 投稿者 mh
  • 6月 17, 2025
  • 11 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第10章:Cloud DNS:インターネットの「電話帳」サービス

  • 投稿者 mh
  • 6月 16, 2025
  • 15 views

Kubernetes Learning 第36章:Argo CDとFluxの概要~Kubernetesの自動運用を支えるGitOpsツール~

  • 投稿者 mh
  • 6月 15, 2025
  • 30 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第9章:IPアドレス(外部IP、内部IP、静的IP):GCPリソースの「住所」と「電話番号」

  • 投稿者 mh
  • 6月 14, 2025
  • 28 views

Kubernetes Learning 第35章:GitOpsとは?~Kubernetes運用をもっとスマートにする考え方~

  • 投稿者 mh
  • 6月 13, 2025
  • 52 views