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

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

  • 投稿者 mh
  • 6月 24, 2025
  • 72 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第13章:ストレージとデータベースの基礎 : オブジェクトストレージ: Cloud Storage(バケット、オブジェクト、ストレージクラス)- あなたの「データ置き場」

  • 投稿者 mh
  • 6月 23, 2025
  • 89 views

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

  • 投稿者 mh
  • 6月 21, 2025
  • 89 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第12章:Cloud CDN(Content Delivery Network):あなたのWebサイトを「世界中のユーザーに超高速で届ける宅配便ネットワーク」

  • 投稿者 mh
  • 6月 20, 2025
  • 107 views

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

  • 投稿者 mh
  • 6月 19, 2025
  • 95 views

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

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