Gson-Getting Started with Java-JSON Serialization&Deserialization

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の本を入手!

Gsonブック

JsonからJavaオブジェクトへのマッピング(およびその逆)は90年代のものです。Gsonは、最小限の労力でJavaとJSONの間を自動的にマッピングする最新のソリ

あなただけの方法を知っておく必要があります! 私たちの本の中でGsonの機能、構成&カスタマイズについてのすべての詳細を学びます。

私たちの本には、Gsonについて知る必要があるすべてが含まれています。 あなたの時間を大切にし、迅速にあなたの問題を修正するためにGoogle検索の無限の時間から自分自身を保存します。 あなたの知識のupfrontときれいな解決に投資しなさい。 私達はあなたのチームでGsonの専門家をします。

は、ワークブックが含まれています!

コメントを残す

メールアドレスが公開されることはありません。

More: