50以上のRetrofitブログ記事を公開した後、多くの開発者がGoogleのGsonを広範に紹介したいという十分なフィードバックを集めました。 Gsonは、JSONとして表されるデータ構造をJavaオブジェクトにマップするための非常に強力なライブラリです。 もちろん、それ以外の方法でもサポートされており、Javaオブジェクトの適切なJSON表現を作成することができます。
このシリーズがどこに行くのか興味があるなら、私たちのシリーズの概要をチェックしてください:
Gsonシリーズ概要
Gson依存関係
このガイドは実践的であり、数分でいくつかのシリアル化から始まります。 読者の多くはAndroid開発者であるため、私たちはあなたのためにそれを調整しますが、GsonはどのJava環境でも使用できます。 始める前に、Gsonライブラリをプロジェクトに取り込む必要があります。 執筆時点では、最新バージョンは2.8.5
です。 Gradleを使用している場合は、次の行を追加します:
implementation 'com.google.code.gson:gson:2.8.5'
Mavenを使用している場合は、次の依存関係を追加できます:
<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> <scope>compile</scope> </dependency></dependencies>
どちらの依存関係管理システムを使用していない貧しい人のために、あなたは公式のGitHubリポジトリでjarをダウンロードすることができます。
Java-JSONシリアル化の基礎
それでは、いくつかのシリアル化をしましょう! Gsonのコンテキストでの直列化とは、JavaオブジェクトをそのJSON表現にマッピングすることを意味します。 次のいくつかのチュートリアルでは、データはより複雑になりますが、今のところ非常に単純なUserSimple
オブジェクトから始めます:
public class UserSimple { String name; String email; int age; boolean isDeveloper;}
userオブジェクトには次の4つのプロパティがあります:
- ユーザーの
name
は文字列オブジェクトです - ユーザーの
email
も文字列オブジェクトです - ユーザーの
age
は整数であり、年齢は年で格納されます(たとえば、26
ではなく、正確な誕生日!) - 最後にブールフラグ
isDeveloper
AndroidまたはJavaアプリケーションは、UserSimple
オブジェクトをJSON表現に変換する必要があります。 メンバー名を同じに保つと仮定すると、このブログ投稿の著者であるNormanにとってこのようなJSONが期待されます:
{ "name": "Norman", "email": "[email protected]", "age": 26, "isDeveloper": true}
それでは、Gsonで変換を行う方法を見てみましょう。 まず、Norman用のJavaオブジェクトを作成する必要があります:
UserSimple userObject = new UserSimple( "Norman", "[email protected]", 26, true);
シリアル化を行うには、変換を処理するGson
オブジェクトが必要です。 単純にコンストラクタを使用できます:
Gson gson = new Gson();
次に、関数toJson()
を呼び出し、UserSimple
オブジェクトを渡す必要があります:
String userJson = gson.toJson(userObject);
userJson
オブジェクトには、次の値が含まれています:
{ "age": 26, "email": "[email protected]", "isDeveloper": true, "name": "Norman"}
Gsonはプロパティの順序を(アルファベット順に)変更しましたが、内容は同じです! Gsonがどのように型を尊重したかに注意してください。 文字列値は""
でラップされましたが、整数値にはラップされませんでした。 私たちはJSON
オブジェクトを混乱させたり、単一のメンバーをコピーする必要はありませんでした。 Gsonへの単一の呼び出しは、オブジェクト全体をマップするのに十分でした。 これは、複雑なデータ構造を扱うときに非常に便利です。 しかし、あまりにも深く行く前に、他の方向をテストしてみましょう。 Gsonは上記のJSONからJavaオブジェクトを作成できますか?
JSON-Javaの逆シリアル化の基礎
まず、上記のJSONを含む文字列を作成する必要があります:
String userJson = "{'age':26,'email':'[email protected]','isDeveloper':true,'name':'Norman'}";
私たちは"
を'
に変更し、\"
のトンがエスケープされないようにしました。 それにもかかわらず、それはいずれかの方法で動作します。 次のステップは、おそらく推測したように、Gsonインスタンスを作成することです:
Gson gson = new Gson();
最後に、JSONからJavaオブジェクトにマップする必要がありますfromJson()
:
UserSimple userObject = gson.fromJson(userJson, UserSimple.class);
期待されるJavaオブジェクトを2番目のパラメータとして渡す方法に注意してください。 それ以外の場合、GsonはJSONをどのようにマップするべきかを知りません。 マジシャンじゃない!
デバッガを接続し、結果のuserObject
をチェックすると、Gsonがすべてのプロパティを正しくマッピングしたことがわかります:
この入門記事では、Gsonの基本的な使用法を見てきました。 JSONデータとのマッピングがいかに簡単であるかを示しました。 私たちは、あなたが現時点では質問の束を持っていると確信しています:
- Javaモデルクラスにはconstructor/getter/setterが必要ですか?
- Javaモデルフィールドはプライベートにできますか?
- null値はどのように処理されますか?
- Javaクラスのメンバー名がJSONと異なる場合はどうなりますか?
- オブジェクトの配列/リストを直列化する方法
- ネストされたオブジェクトを直列化する方法
- Gsonは
.fromJson()
の実行中にクラスプロパティの定義されたデフ
心配しないで、今後数週間でそれらのすべてに到達します。 あなたが心の中で特定のトピックを持っている場合は、私たちはコメントやtwitterの@futurestud_ioで知らせてください。
Make it rock&enjoy coding!
まだ専門家ではありませんか? 私たちのGsonの本を入手!
JsonからJavaオブジェクトへのマッピング(およびその逆)は90年代のものです。Gsonは、最小限の労力でJavaとJSONの間を自動的にマッピングする最新のソリ
あなただけの方法を知っておく必要があります! 私たちの本の中でGsonの機能、構成&カスタマイズについてのすべての詳細を学びます。
私たちの本には、Gsonについて知る必要があるすべてが含まれています。 あなたの時間を大切にし、迅速にあなたの問題を修正するためにGoogle検索の無限の時間から自分自身を保存します。 あなたの知識のupfrontときれいな解決に投資しなさい。 私達はあなたのチームでGsonの専門家をします。
は、ワークブックが含まれています!