Gson-quick-guide
Gson-概要
Google Gsonは、JavaオブジェクトをJSONに、またはその逆にシリアル化するためのシンプルなJavaベースのライブラリです。 Googleが開発したオープンソースのライブラリです。
次のポイントは、このライブラリを使用する理由を強調しています-
- Standardized -Gsonは、Googleが管理する標準化されたライブラリです。
- 効率的-Java標準ライブラリの信頼性が高く、高速で効率的な拡張機能です。
- 最適化-ライブラリは高度に最適化されています。
- ジェネリックのサポート-ジェネリックの広範なサポートを提供します。
- 複雑な内部クラスをサポート-深い継承階層を持つ複雑なオブジェクトをサポートします。
Gsonの機能
ここにGsonの最も顕著な特徴のいくつかのリストがあります-
- 使いやすい-Gson APIは、一般的に使用されるユースケースを簡素化する高レベルのファサードを提供します。
- マッピングを作成する必要はありません-Gson APIは、シリアル化されるほとんどのオブジェクトにデフォルトのマッピングを提供します。
- パフォーマンス-Gsonは非常に高速で、メモリフットプリントが低くなっています。 大規模なオブジェクトグラフまたはシステムに適しています。
- Clean JSON -Gsonは、読みやすく、簡潔でコンパクトなJSON結果を作成します。
- *依存関係なし-Gsonライブラリは、JDK以外のライブラリを必要としません。
- オープンソース-Gsonライブラリはオープンソースです。自由に利用できます。
JSONを処理する3つの方法
GsonはJSONを処理する3つの代替方法を提供します-
ストリーミングAPI
JSONコンテンツを個別のイベントとして読み書きします。 JsonReader および JsonWriter は、 JsonToken と呼ばれるトークンとしてデータを読み取り/書き込みします。
JSONを処理する3つのアプローチの中で最も強力なアプローチです。 オーバーヘッドは最も低く、読み取り/書き込み操作では非常に高速です。 XMLのStaxパーサーに似ています。
ツリーモデル
JSONドキュメントのメモリ内ツリー表現を準備します。 JsonObjectノードのツリーを構築します。 これは柔軟なアプローチであり、XMLのDOMパーサーに類似しています。
データバインディング
プロパティアクセサを使用して、JSONをPOJO(Plain Old Java Object)との間で変換します。 Gsonは、データ型アダプターを使用してJSONの読み取り/書き込みを行います。 XMLのJAXBパーサーに似ています。
Gson-環境設定
ローカル環境のセットアップ
Javaプログラミング言語のローカル環境をセットアップする場合は、このセクションで、マシンにJavaをダウンロードしてセットアップする方法を説明します。 環境をセットアップするには、以下の手順に従ってください。
Java SEは、https://www.oracle.com/technetwork/java/archive-139210l [Download Java]のリンクから無料で入手できます。 そのため、オペレーティングシステムに基づいてバージョンをダウンロードします。
指示に従ってJavaをダウンロードし、*。exe *を実行して、マシンにJavaをインストールします。 マシンにJavaをインストールしたら、正しいインストールディレクトリを指すように環境変数を設定する必要があります。
Windows 2000/XPでパスを設定する
_c:\ Program Files \ java \ jdk_ディレクトリにJavaをインストールしたと仮定します-
- 「マイコンピュータ」を右クリックして、「プロパティ」を選択します。
- 「詳細」タブの下の「環境変数」ボタンをクリックします。
- 次に、「Path」変数を変更して、Java実行可能ファイルへのパスも含まれるようにします。 たとえば、パスが現在「C:\ WINDOWS \ SYSTEM32」に設定されている場合、パスを「C:\ WINDOWS \ SYSTEM32; c:\ Program Files \ java \ jdk \ bin」に変更します。
Windows 95/98/MEでのパスのセットアップ
_c:\ Program Files \ java \ jdk_ディレクトリにJavaをインストールしたと仮定します-
- 「C:\ autoexec.bat」ファイルを編集し、最後に次の行を追加します。「SET PATH =%PATH%; C:\ Program Files \ java \ jdk \ bin」
Linux、UNIX、Solaris、FreeBSDのパスのセットアップ
環境変数 PATH は、Javaバイナリがインストールされている場所を指すように設定する必要があります。 これがうまくいかない場合は、シェルのドキュメントを参照してください。
たとえば、bashをシェルとして使用する場合、次の行を '.bashrcの最後に追加します:export PATH =/path/to/java:$ PATH'
人気のあるJavaエディター
Javaプログラムを作成するには、テキストエディターが必要です。 市場にはかなりの数の洗練されたIDEがあります。 しかし、今のところ、次のいずれかを検討することができます-
- メモ帳-Windowsでは、メモ帳(このチュートリアルで推奨)やTextPadなどのシンプルなテキストエディタを使用できます。
- Netbeans -これはオープンソースで無料のJava IDEであり、https://netbeans.org/indexlからダウンロードできます。
- Eclipse -Eclipseオープンソースコミュニティによって開発されたJava IDEでもあり、https://www.eclipse.org/からダウンロードできます。
Gsonアーカイブをダウンロードする
*gson-2.3.1.jar* からGson jarファイルの最新バージョンをダウンロードします。 このチュートリアルを書いている時点で、gson-2.3.1.jarをダウンロードし、C:\> gsonフォルダーにコピーしました。
OS | Archive name |
---|---|
Windows | gson-2.3.1.jar |
Linux | gson-2.3.1.jar |
Mac | gson-2.3.1.jar |
Gson環境を設定する
*GSON_HOME* 環境変数を設定して、マシン上のGson jarが保存されているベースディレクトリの場所を指すようにします。
OS | Output |
---|---|
Windows | Set the environment variable GSON_HOME to C:\gson |
Linux | export GSON_HOME=/usr/local/gson |
Mac | export GSON_HOME=/Library/gson |
CLASSPATH変数を設定する
Gson jarの場所を指すように CLASSPATH 環境変数を設定します。
OS | Output |
---|---|
Windows | Set the environment variable CLASSPATH to %CLASSPATH%;%GSON_HOME%\gson-2.3.1.jar;.; |
Linux | export CLASSPATH=$CLASSPATH:$GSON_HOME/gson-2.3.1.jar:. |
Mac | export CLASSPATH=$CLASSPATH:$GSON_HOME/gson-2.3.1.jar:. |
Gson-最初のアプリケーション
Google Gsonライブラリの詳細に入る前に、動作中のアプリケーションを見てみましょう。 この例では、 Student クラスを作成しました。 学生の詳細を含むJSON文字列を作成し、それを student オブジェクトにデシリアライズしてから、JSON文字列にシリアライズします。
例
C:\> GSON_WORKSPACEにGsonTesterという名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonTester {
public static void main(String[] args) {
String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";
GsonBuilder builder = new GsonBuilder();
builder.setPrettyPrinting();
Gson gson = builder.create();
Student student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
jsonString = gson.toJson(student);
System.out.println(jsonString);
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今、結果を見るためにGsonTesterを実行します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
Student [ name: Mahesh, age: 21 ]
{
"name" : "Mahesh",
"age" : 21
}
覚えておくべき手順
以下は、ここで考慮すべき重要な手順です。
ステップ1-GsonBuilderを使用してGsonオブジェクトを作成する
Gsonオブジェクトを作成します。 これは再利用可能なオブジェクトです。
GsonBuilder builder = new GsonBuilder();
builder.setPrettyPrinting();
Gson gson = builder.create();
ステップ2-JSONをオブジェクトに逆シリアル化します
fromJson()メソッドを使用して、JSONからオブジェクトを取得します。 Json文字列/Json文字列のソースとオブジェクトタイプをパラメーターとして渡します。
//Object to JSON Conversion
Student student = gson.fromJson(jsonString, Student.class);
ステップ3-オブジェクトをJSONにシリアル化する
toJson()メソッドを使用して、オブジェクトのJSON文字列表現を取得します。
//Object to JSON Conversion
jsonString = gson.toJson(student);
Gson-クラス
Gsonは、Google Gsonライブラリの主要なアクタークラスです。 Javaオブジェクトを一致するJSONコンストラクトに、またはその逆に変換する機能を提供します。 Gsonは最初にGsonBuilderを使用して構築され、次にtoJson(Object)またはfromJson(String、Class)メソッドがJSON構造の読み取り/書き込みに使用されます。
クラス宣言
以下は com.google.gson.Gson クラスの宣言です-
public final class Gson
extends Object
コンストラクタ
Sr.No | Constructor & Description |
---|---|
1 |
Gson() デフォルト設定でGsonオブジェクトを構築します。 |
クラスメソッド
Sr.No | Method & Description |
---|---|
1 |
<T> T fromJson(JsonElement json, Class<T> classOfT) このメソッドは、指定された解析ツリーから読み取られたJsonを指定されたタイプのオブジェクトにデシリアライズします。 |
2 |
<T> T fromJson(JsonElement json, Type typeOfT) このメソッドは、指定された解析ツリーから読み取られたJsonを指定されたタイプのオブジェクトにデシリアライズします。 |
3 |
<T> T fromJson(JsonReader reader, Type typeOfT) リーダーから次のJSON値を読み取り、それをtypeOfT型のオブジェクトに変換します。 |
4 |
<T> T fromJson(Reader json, Class<T> classOfT) このメソッドは、指定されたリーダーから読み取られたJsonを指定されたクラスのオブジェクトにデシリアライズします。 |
5 |
<T> T fromJson(Reader json, Type typeOfT) このメソッドは、指定されたリーダーから読み取られたJsonを指定されたタイプのオブジェクトにデシリアライズします。 |
6 |
<T> T fromJson(String json, Class<T> classOfT) このメソッドは、指定されたJsonを指定されたクラスのオブジェクトにデシリアライズします。 |
7 |
<T> T fromJson(String json, Type typeOfT) このメソッドは、指定されたJsonを指定されたタイプのオブジェクトにデシリアライズします。 |
8 |
<T> TypeAdapter<T> getAdapter(Class<T> type) 型の型アダプターを返します。 |
9 |
<T> TypeAdapter<T> getAdapter(TypeToken<T> type) 型の型アダプターを返します。 |
10 |
<T> TypeAdapter<T> getDelegateAdapter(TypeAdapterFactory skipPast, TypeToken<T> type) このメソッドは、指定された型の代替型アダプターを取得するために使用されます。 |
11 |
String toJson(JsonElement jsonElement) JsonElementsのツリーを同等のJSON表現に変換します。 |
12 |
void toJson(JsonElement jsonElement, Appendable writer) JsonElementsのツリーに相当するJSONを書き出します。 |
13 |
void toJson(JsonElement jsonElement, JsonWriter writer) jsonElementのJSONをライターに書き込みます。 |
14 |
String toJson(Object src) このメソッドは、指定されたオブジェクトを同等のJSON表現にシリアル化します。 |
15 |
void toJson(Object src, Appendable writer) このメソッドは、指定されたオブジェクトを同等のJSON表現にシリアル化します。 |
16 |
String toJson(Object src, Type typeOfSrc) このメソッドは、ジェネリック型のオブジェクトを含む指定されたオブジェクトを、同等のJson表現にシリアル化します。 |
17 |
void toJson(Object src, Type typeOfSrc, Appendable writer) このメソッドは、ジェネリック型のオブジェクトを含む指定されたオブジェクトを、同等のJson表現にシリアル化します。 |
18 |
void toJson(Object src, Type typeOfSrc, JsonWriter writer) typeOfSrc型のsrcのJSON表現をライターに書き込みます。 |
19 |
JsonElement toJsonTree(Object src) このメソッドは、指定されたオブジェクトを、JsonElementsのツリーと同等の表現にシリアル化します。 |
20 |
JsonElement toJsonTree(Object src, Type typeOfSrc) このメソッドは、ジェネリック型のオブジェクトを含む指定されたオブジェクトを、JsonElementsのツリーと同等の表現にシリアル化します。 |
21 | String toString() |
継承されたメソッド
このクラスは、次のクラスからメソッドを継承します-
- java.lang.Object
例
任意のエディターを使用して次のJavaプログラムを作成し、たとえばC:/> GSON_WORKSPACEに保存します
*_File-GsonTester.java_*
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonTester {
public static void main(String[] args) {
String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";
GsonBuilder builder = new GsonBuilder();
builder.setPrettyPrinting();
Gson gson = builder.create();
Student student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
jsonString = gson.toJson(student);
System.out.println(jsonString);
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今、結果を見るためにGsonTesterを実行します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認する
Student [ name: Mahesh, age: 21 ]
{
"name" : "Mahesh",
"age" : 21
}
Gson-オブジェクトのシリアル化
JavaオブジェクトをJsonファイルにシリアル化してから、そのJsonファイルを読み取ってオブジェクトを取得しましょう。 この例では、 Student クラスを作成しました。 student オブジェクトの json 表現を持つ student.json ファイルを作成します。
例
*C:\> GSON_WORKSPACE* に *GsonTester* という名前のJavaクラスファイルを作成します。
ファイル-GsonTester.java
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonTester {
public static void main(String args[]) {
GsonTester tester = new GsonTester();
try {
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
tester.writeJSON(student);
Student student1 = tester.readJSON();
System.out.println(student1);
}
catch(FileNotFoundException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
private void writeJSON(Student student) throws IOException {
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
FileWriter writer = new FileWriter("student.json");
writer.write(gson.toJson(student));
writer.close();
}
private Student readJSON() throws FileNotFoundException {
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
BufferedReader bufferedReader = new BufferedReader(
new FileReader("student.json"));
Student student = gson.fromJson(bufferedReader, Student.class);
return student;
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今、結果を見るためにGsonTesterを実行します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認する
Student [ name: Mahesh, age: 10 ]
Gson-データバインディング
データバインディングAPIは、プロパティアクセサーまたはアノテーションを使用してJSONをPOJO(Plain Old Java Object)との間で変換するために使用されます。 2つのタイプがあります。
- Primitives Data Binding -JSONをJavaマップ、リスト、文字列、数値、ブール値、およびNULLオブジェクトとの間で変換します。
- オブジェクトデータバインディング-JSONを任意のJAVAタイプとの間で変換します。
Gsonは、両方のタイプのデータバインディングのJSONを読み書きします。 データバインディングは、XMLのJAXBパーサーに似ています。
プリミティブデータバインディング
プリミティブデータバインディングとは、JSONからJAVA Coreデータ型および組み込みコレクションへのマッピングを指します。 Gsonは、プリミティブデータ型のシリアル化/逆シリアル化に使用できるさまざまな組み込みアダプターを提供します。
例
動作中のプリミティブデータバインディングを見てみましょう。 ここでは、JAVAの基本型をJSONに直接マッピングし、その逆も行います。
*C:\> Gson_WORKSPACE* に *GsonTester* という名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import java.util.Arrays;
import com.google.gson.Gson;
public class GsonTester {
public static void main(String args[]) {
Gson gson = new Gson();
String name = "Mahesh Kumar";
long rollNo = 1;
boolean verified = false;
int[] marks = {100,90,85};
//Serialization
System.out.println("{");
System.out.println("name: " + gson.toJson(name) +",");
System.out.println("rollNo: " + gson.toJson(rollNo) +",");
System.out.println("verified: " + gson.toJson(verified) +",");
System.out.println("marks:" + gson.toJson(marks));
System.out.println("}");
//De-serialization
name = gson.fromJson("\"Mahesh Kumar\"", String.class);
rollNo = gson.fromJson("1", Long.class);
verified = gson.fromJson("false", Boolean.class);
marks = gson.fromJson("[100,90,85]", int[].class);
System.out.println("name: " + name);
System.out.println("rollNo: " + rollNo);
System.out.println("verified: " +verified);
System.out.println("marks:" + Arrays.toString(marks));
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
{
name: "Mahesh Kumar",
rollNo: 1,
verified: false,
marks:[100,90,85]
}
name: Mahesh Kumar
rollNo: 1
verified: false
marks:[100, 90, 85]
Gson-オブジェクトデータバインディング
オブジェクトデータバインディングは、JSONからJAVAオブジェクトへのマッピングを指します。
//Create a Gson instance
Gson gson = new Gson();
//map Student object to JSON content
String jsonString = gson.toJson(student);
//map JSON content to Student object
Student student1 = gson.fromJson(jsonString, Student.class);
例
動作中のオブジェクトデータバインディングを見てみましょう。 ここでは、JAVAオブジェクトをJSONに直接マップし、その逆も行います。
C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
ファイル-GsonTester.java
import com.google.gson.Gson;
public class GsonTester {
public static void main(String args[]) {
Gson gson = new Gson();
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
String jsonString = gson.toJson(student);
System.out.println(jsonString);
Student student1 = gson.fromJson(jsonString, Student.class);
System.out.println(student1);
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
{"name":"Mahesh","age":10}
Student [ name: Mahesh, age: 10 ]
Gson-ツリーモデル
ツリーモデルは、JSONドキュメントのメモリ内ツリー表現を準備します。 JsonObjectノードのツリーを構築します。 これは柔軟なアプローチであり、XMLのDOMパーサーに類似しています。
JSONからツリーを作成する
JsonParserは、JSONを読み取った後、ツリーのルートノードへのポインターを提供します。 ルートノードを使用して、完全なツリーを走査できます。 提供されたJSON文字列のルートノードを取得するには、次のコードスニペットを検討してください。
//Create an JsonParser instance
JsonParser parser = new JsonParser();
String jsonString =
"{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
//create tree from JSON
JsonElement rootNode = parser.parse(jsonString);
トラバースツリーモデル
ツリーを走査しながらデータを処理しながら、ルートノードへの相対パスを使用して各ノードを取得します。 次のコードスニペットは、ツリーをトラバースする方法を示しています。
JsonObject details = rootNode.getAsJsonObject();
JsonElement nameNode = details.get("name");
System.out.println("Name: " +nameNode.getAsString());
JsonElement ageNode = details.get("age");
System.out.println("Age: " + ageNode.getAsInt());
例
C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
public class GsonTester {
public static void main(String args[]) {
String jsonString =
"{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
JsonParser parser = new JsonParser();
JsonElement rootNode = parser.parse(jsonString);
if (rootNode.isJsonObject()) {
JsonObject details = rootNode.getAsJsonObject();
JsonElement nameNode = details.get("name");
System.out.println("Name: " +nameNode.getAsString());
JsonElement ageNode = details.get("age");
System.out.println("Age: " + ageNode.getAsInt());
JsonElement verifiedNode = details.get("verified");
System.out.println("Verified: " + (verifiedNode.getAsBoolean() ? "Yes":"No"));
JsonArray marks = details.getAsJsonArray("marks");
for (int i = 0; i < marks.size(); i++) {
JsonPrimitive value = marks.get(i).getAsJsonPrimitive();
System.out.print(value.getAsInt() + " ");
}
}
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
Name: Mahesh Kumar
Age: 21
Verified: No
100 90 85
Gson-ストリーミング
ストリーミングAPIは、トークンごとにJSONトークンを読み取るために使用されます。 JSONコンテンツを個別のイベントとして読み書きします。 JsonReader および JsonWriter は、 JsonToken と呼ばれるトークンとしてデータを読み取り/書き込みします。
JSONを処理する3つのアプローチの中で最も強力なアプローチです。 オーバーヘッドは最も低く、読み取り/書き込み操作では非常に高速です。 XMLのStaxパーサーに似ています。
この章では、GSONストリーミングAPIを使用してJSONデータを読み取る方法を紹介します。 ストリーミングAPIはトークンの概念で動作し、Jsonのすべての詳細は慎重に処理されます。
//create JsonReader object and pass it the json source or json text.
JsonReader reader = new JsonReader(new StringReader(jsonString));
//start reading json
reader.beginObject();
//get the next token
JsonToken token = reader.peek();
//check the type of the token
if (token.equals(JsonToken.NAME)) {
//get the current token
fieldname = reader.nextName();
}
例
動作中の JsonReader を見てみましょう。 C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
ファイル-GsonTester.java
import java.io.IOException;
import java.io.StringReader;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
public class GsonTester {
public static void main(String args[]) {
String jsonString =
"{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
JsonReader reader = new JsonReader(new StringReader(jsonString));
try {
handleJsonObject(reader);
}
catch (IOException e) {
e.printStackTrace();
}
}
private static void handleJsonObject(JsonReader reader) throws IOException {
reader.beginObject();
String fieldname = null;
while (reader.hasNext()) {
JsonToken token = reader.peek();
if (token.equals(JsonToken.BEGIN_ARRAY)) {
System.out.print("Marks [ ");
handleJsonArray(reader);
System.out.print("]");
} else if (token.equals(JsonToken.END_OBJECT)) {
reader.endObject();
return;
} else {
if (token.equals(JsonToken.NAME)) {
//get the current token
fieldname = reader.nextName();
}
if ("name".equals(fieldname)) {
//move to next token
token = reader.peek();
System.out.println("Name: "+reader.nextString());
}
if("age".equals(fieldname)) {
//move to next token
token = reader.peek();
System.out.println("Age:" + reader.nextInt());
}
if("verified".equals(fieldname)) {
//move to next token
token = reader.peek();
System.out.println("Verified:" + reader.nextBoolean());
}
}
}
}
private static void handleJsonArray(JsonReader reader) throws IOException {
reader.beginArray();
String fieldname = null;
while (true) {
JsonToken token = reader.peek();
if (token.equals(JsonToken.END_ARRAY)) {
reader.endArray();
break;
} else if (token.equals(JsonToken.BEGIN_OBJECT)) {
handleJsonObject(reader);
} else if (token.equals(JsonToken.END_OBJECT)) {
reader.endObject();
} else {
System.out.print(reader.nextInt() + " ");
}
}
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
Name: Mahesh Kumar
Age:21
Verified:false
Marks [ 100 90 85 ]
Gson-シリアル化の例
この章では、配列、コレクション、ジェネリックのシリアル化/逆シリアル化について説明します。
配列の例
int[] marks = {100,90,85};
//Serialization
System.out.println("marks:" + gson.toJson(marks));
//De-serialization
marks = gson.fromJson("[100,90,85]", int[].class);
System.out.println("marks:" + Arrays.toString(marks));
例
動作中の配列のシリアライゼーション/デシリアライゼーションを見てみましょう。 C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import java.util.Arrays;
import com.google.gson.Gson;
public class GsonTester {
public static void main(String args[]) {
Gson gson = new Gson();
int[] marks = {100,90,85};
String[] names = {"Ram","Shyam","Mohan"};
//Serialization
System.out.print("{");
System.out.print("marks:" + gson.toJson(marks) + ",");
System.out.print("names:" + gson.toJson(names));
System.out.println("}");
//De-serialization
marks = gson.fromJson("[100,90,85]", int[].class);
names = gson.fromJson("[\"Ram\",\"Shyam\",\"Mohan\"]", String[].class);
System.out.println("marks:" + Arrays.toString(marks));
System.out.println("names:" + Arrays.toString(names));
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今、結果を見るためにGsonTesterを実行します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
{marks:[100,90,85],names:["Ram","Shyam","Mohan"]}
marks:[100, 90, 85]
names:[Ram, Shyam, Mohan]
コレクションの例
List marks = new ArrayList();
//Serialization
System.out.println("marks:" + gson.toJson(marks));
//De-serialization
//get the type of the collection.
Type listType = new TypeToken<list>(){}.getType();
//pass the type of collection
marks = gson.fromJson("[100,90,85]", listType);
System.out.println("marks:" +marks);</list>
例
動作中のコレクションのシリアル化/逆シリアル化を見てみましょう。 C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonTester {
public static void main(String args[]) {
Gson gson = new Gson();
Collection<Integer> marks = new ArrayList<Integer>();
marks.add(100);
marks.add(90);
marks.add(85);
//Serialization
System.out.print("{");
System.out.print("marks:" + gson.toJson(marks));
System.out.println("}");
//De-serialization
Type listType = new TypeToken<Collection<Integer>>(){}.getType();
marks = gson.fromJson("[100,90,85]", listType);
System.out.println("marks:" +marks);
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
{marks:[100,90,85]}
marks:[100, 90, 85]
ジェネリックの例
Gsonは、JavaリフレクションAPIを使用して、Jsonテキストがマップされるオブジェクトのタイプを取得します。 しかし、ジェネリックでは、この情報はシリアル化中に失われます。 この問題に対処するために、Gsonは汎用オブジェクトのタイプを保存するクラス com.google.gson.reflect.TypeToken を提供しています。
例
実際のGenericsのシリアル化/逆シリアル化を見てみましょう。 C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import java.lang.reflect.Type;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonTester {
public static void main(String args[]) {
//create a shape class of type circle.
Shape<Circle> shape = new Shape<Circle>();
//Create a Circle object
Circle circle = new Circle(5.0);
//assign circle to shape
shape.setShape(circle);
Gson gson = new Gson();
//Define a Type shapeType of type circle.
Type shapeType = new TypeToken<Shape<Circle>>() {}.getType();
//Serialize the json as ShapeType
String jsonString = gson.toJson(shape, shapeType);
System.out.println(jsonString);
Shape shape1 = gson.fromJson(jsonString, Shape.class);
System.out.println(shape1.get().getClass());
System.out.println(shape1.get().toString());
System.out.println(shape1.getArea());
Shape shape2 = gson.fromJson(jsonString, shapeType);
System.out.println(shape2.get().getClass());
System.out.println(shape2.get().toString());
System.out.println(shape2.getArea());
}
}
class Shape <T> {
public T shape;
public void setShape(T shape) {
this.shape = shape;
}
public T get() {
return shape;
}
public double getArea() {
if(shape instanceof Circle) {
return ((Circle) shape).getArea();
} else {
return 0.0;
}
}
}
class Circle {
private double radius;
public Circle(double radius){
this.radius = radius;
}
public String toString() {
return "Circle";
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double getArea() {
return (radius*radius*3.14);
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
{"shape":{"radius":5.0}}
class com.google.gson.internal.LinkedTreeMap
{radius = 5.0}
0.0
class Circle
Circle
78.5
Gson-内部クラスのシリアル化
この章では、内部クラスを持つクラスのシリアル化/逆シリアル化について説明します。
ネストされた内部クラスの例
Student student = new Student();
student.setRollNo(1);
Student.Name name = student.new Name();
name.firstName = "Mahesh";
name.lastName = "Kumar";
student.setName(name);
//serialize inner class object
String nameString = gson.toJson(name);
System.out.println(nameString);
//deserialize inner class object
name = gson.fromJson(nameString,Student.Name.class);
System.out.println(name.getClass());
例
動作中の内部クラスを持つクラスのシリアル化/逆シリアル化の例を見てみましょう。 C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import com.google.gson.Gson;
public class GsonTester {
public static void main(String args[]) {
Student student = new Student();
student.setRollNo(1);
Student.Name name = student.new Name();
name.firstName = "Mahesh";
name.lastName = "Kumar";
student.setName(name);
Gson gson = new Gson();
String jsonString = gson.toJson(student);
System.out.println(jsonString);
student = gson.fromJson(jsonString, Student.class);
System.out.println("Roll No: "+ student.getRollNo());
System.out.println("First Name: "+ student.getName().firstName);
System.out.println("Last Name: "+ student.getName().lastName);
String nameString = gson.toJson(name);
System.out.println(nameString);
name = gson.fromJson(nameString,Student.Name.class);
System.out.println(name.getClass());
System.out.println("First Name: "+ name.firstName);
System.out.println("Last Name: "+ name.lastName);
}
}
class Student {
private int rollNo;
private Name name;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
class Name {
public String firstName;
public String lastName;
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今、結果を見るためにGsonTesterを実行します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
{"rollNo":1,"name":{"firstName":"Mahesh","lastName":"Kumar"}}
Roll No: 1
First Name: Mahesh
Last Name: Kumar
{"firstName":"Mahesh","lastName":"Kumar"}
class Student$Name
First Name: Mahesh
Last Name: Kumar
ネストされた静的内部クラスの例
Student student = new Student();
student.setRollNo(1);
Student.Name name = new Student.Name();
name.firstName = "Mahesh";
name.lastName = "Kumar";
student.setName(name);
//serialize static inner class object
String nameString = gson.toJson(name);
System.out.println(nameString);
//deserialize static inner class object
name = gson.fromJson(nameString,Student.Name.class);
System.out.println(name.getClass());
例
静的な内部クラスが動作しているクラスのシリアル化/逆シリアル化の例を見てみましょう。 C:\> GSON_WORKSPACEにGsonTesterという名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import com.google.gson.Gson;
public class GsonTester {
public static void main(String args[]) {
Student student = new Student();
student.setRollNo(1);
Student.Name name = new Student.Name();
name.firstName = "Mahesh";
name.lastName = "Kumar";
student.setName(name);
Gson gson = new Gson();
String jsonString = gson.toJson(student);
System.out.println(jsonString);
student = gson.fromJson(jsonString, Student.class);
System.out.println("Roll No: "+ student.getRollNo());
System.out.println("First Name: "+ student.getName().firstName);
System.out.println("Last Name: "+ student.getName().lastName);
String nameString = gson.toJson(name);
System.out.println(nameString);
name = gson.fromJson(nameString,Student.Name.class);
System.out.println(name.getClass());
System.out.println("First Name: "+ name.firstName);
System.out.println("Last Name: "+ name.lastName);
}
}
class Student {
private int rollNo;
private Name name;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
static class Name {
public String firstName;
public String lastName;
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
{"rollNo":1,"name":{"firstName":"Mahesh","lastName":"Kumar"}}
Roll No: 1
First Name: Mahesh
Last Name: Kumar
{"firstName":"Mahesh","lastName":"Kumar"}
class Student$Name
First Name: Mahesh
Last Name: Kumar
Gson-カスタムタイプアダプター
Gsonは、組み込みのアダプターを使用してオブジェクトのシリアル化/逆シリアル化を実行します。 また、カスタムアダプタもサポートしています。 カスタムアダプタの作成方法と使用方法について説明します。
カスタムアダプターを作成する
*TypeAdapter* クラスを拡張し、ターゲットのオブジェクトのタイプを渡すことにより、カスタムアダプターを作成します。 *read* メソッドと *write* メソッドをオーバーライドして、それぞれカスタムの逆シリアル化とシリアル化を実行します。
class StudentAdapter extends TypeAdapter<Student> {
@Override
public Student read(JsonReader reader) throws IOException {
...
}
@Override
public void write(JsonWriter writer, Student student) throws IOException {
}
}
カスタムアダプターを登録する
GsonBuilderを使用してカスタムアダプターを登録し、 GsonBuilder を使用してGsonインスタンスを作成します。
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Student.class, new StudentAdapter());
Gson gson = builder.create();
アダプターを使用する
Gsonは、カスタムアダプターを使用してJsonテキストをオブジェクトに、またはその逆に変換します。
String jsonString = "{\"name\":\"Mahesh\", \"rollNo\":1}";
Student student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
jsonString = gson.toJson(student);
System.out.println(jsonString);
例
動作中のカスタムタイプアダプターの例を見てみましょう。 C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import java.io.IOException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
public class GsonTester {
public static void main(String args[]) {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Student.class, new StudentAdapter());
builder.setPrettyPrinting();
Gson gson = builder.create();
String jsonString = "{\"name\":\"Mahesh\", \"rollNo\":1}";
Student student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
jsonString = gson.toJson(student);
System.out.println(jsonString);
}
}
class StudentAdapter extends TypeAdapter<Student> {
@Override
public Student read(JsonReader reader) throws IOException {
Student student = new Student();
reader.beginObject();
String fieldname = null;
while (reader.hasNext()) {
JsonToken token = reader.peek();
if (token.equals(JsonToken.NAME)) {
//get the current token
fieldname = reader.nextName();
}
if ("name".equals(fieldname)) {
//move to next token
token = reader.peek();
student.setName(reader.nextString());
}
if("rollNo".equals(fieldname)) {
//move to next token
token = reader.peek();
student.setRollNo(reader.nextInt());
}
}
reader.endObject();
return student;
}
@Override
public void write(JsonWriter writer, Student student) throws IOException {
writer.beginObject();
writer.name("name");
writer.value(student.getName());
writer.name("rollNo");
writer.value(student.getRollNo());
writer.endObject();
}
}
class Student {
private int rollNo;
private String name;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Student[ name = "+name+", roll no: "+rollNo+ "]";
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
Student[ name = Mahesh, roll no: 1]
{
"name": "Mahesh",
"rollNo": 1
}
Gson-Nullオブジェクトのサポート
デフォルトでは、GsonはNULL値を無視して最適化されたJsonコンテンツを生成します。 ただし、GsonBuilderは* GsonBuilder.serializeNulls()*メソッドを使用して、Json出力にNULL値を表示するフラグを提供します。
GsonBuilder builder = new GsonBuilder();
builder.serializeNulls();
Gson gson = builder.create();
serializeNulls呼び出しを使用しない例
C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
ファイル-GsonTester.java
import com.google.gson.Gson;
public class GsonTester {
public static void main(String args[]) {
Gson gson = new Gson();
Student student = new Student();
student.setRollNo(1);
String jsonString = gson.toJson(student);
System.out.println(jsonString);
student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
}
}
class Student {
private int rollNo;
private String name;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Student[ name = "+name+", roll no: "+rollNo+ "]";
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今、結果を見るためにGsonTesterを実行します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
{"rollNo": 1}
Student[ name = null, roll no: 1]
serializeNulls呼び出しの例
C:\> GSON_WORKSPACEにGsonTesterという名前のJavaクラスファイルを作成します。
ファイル-GsonTester.java
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonTester {
public static void main(String args[]) {
GsonBuilder builder = new GsonBuilder();
builder.serializeNulls();
builder.setPrettyPrinting();
Gson gson = builder.create();
Student student = new Student();
student.setRollNo(1);
String jsonString = gson.toJson(student);
System.out.println(jsonString);
student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
}
}
class Student {
private int rollNo;
private String name;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Student[ name = "+name+", roll no: "+rollNo+ "]";
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
{
"rollNo": 1,
"name": null
}
Student[ name = null, roll no: 1]
Gson-バージョン管理のサポート
Gsonは @ Since アノテーションを提供して、さまざまなバージョンに基づいてクラスのJsonシリアル化/逆シリアル化を制御します。 バージョニングをサポートする次のクラスを検討してください。 このクラスでは、最初に2つの変数 rollNo および name を定義し、その後、新しい変数として verified を追加しました。 @Sinceを使用して、バージョン1.0の時点で rollNo および name を定義し、バージョン1.1であることを確認しました。
class Student {
@Since(1.0)
private int rollNo;
@Since(1.0)
private String name;
@Since(1.1)
private boolean verified;
}
GsonBuilderは、そのようなバージョン管理されたクラスをシリアル化する* setVersion()*メソッドを提供します。
GsonBuilder builder = new GsonBuilder();
builder.setVersion(1.0);
Gson gson = builder.create();
例
実際のバージョン管理サポートの例を見てみましょう。 C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
ファイル-GsonTester.java
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Since;
public class GsonTester {
public static void main(String args[]) {
GsonBuilder builder = new GsonBuilder();
builder.setVersion(1.0);
Gson gson = builder.create();
Student student = new Student();
student.setRollNo(1);
student.setName("Mahesh Kumar");
student.setVerified(true);
String jsonString = gson.toJson(student);
System.out.println(jsonString);
gson = new Gson();
jsonString = gson.toJson(student);
System.out.println(jsonString);
}
}
class Student {
@Since(1.0)
private int rollNo;
@Since(1.0)
private String name;
@Since(1.1)
private boolean verified;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setVerified(boolean verified) {
this.verified = verified;
}
public boolean isVerified() {
return verified;
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今、結果を見るためにGsonTesterを実行します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認します。
{"rollNo":1,"name":"Mahesh Kumar"}
{"rollNo":1,"name":"Mahesh Kumar","verified":true}
Gson-シリアル化からフィールドを除外する
デフォルトでは、GSONは、シリアル化/逆シリアル化プロセスから一時フィールドと静的フィールドを除外します。 次の例を見てみましょう。
例
C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonTester {
public static void main(String args[]) {
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
Student student = new Student();
student.setRollNo(1);
student.setName("Mahesh Kumar");
student.setVerified(true);
student.setId(1);
student.className = "VI";
String jsonString = gson.toJson(student);
System.out.println(jsonString);
}
}
class Student {
private int rollNo;
private String name;
private boolean verified;
private transient int id;
public static String className;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setVerified(boolean verified) {
this.verified = verified;
}
public boolean isVerified() {
return verified;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認する
{"rollNo":1,"name":"Mahesh Kumar","verified":true}
excludeFieldsWithModifiersの使用
GsonBuilderは、シリアル化/逆シリアル化プロセスからexcludeFieldsWithModifiers()メソッドを使用して、特定の修飾子を持つフィールドを除外する制御を提供します。 次の例を見てください。
例
C:\> GSON_WORKSPACEにGsonTesterという名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import java.lang.reflect.Modifier;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonTester {
public static void main(String args[]) {
GsonBuilder builder = new GsonBuilder();
builder.excludeFieldsWithModifiers(Modifier.TRANSIENT);
Gson gson = builder.create();
Student student = new Student();
student.setRollNo(1);
student.setName("Mahesh Kumar");
student.setVerified(true);
student.setId(1);
student.className = "VI";
String jsonString = gson.toJson(student);
System.out.println(jsonString);
}
}
class Student {
private int rollNo;
private String name;
private boolean verified;
private transient int id;
public static String className;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setVerified(boolean verified) {
this.verified = verified;
}
public boolean isVerified() {
return verified;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認する
{"rollNo":1,"name":"Mahesh Kumar","verified":true,"className":"VI"}
@Exposeアノテーションの使用
Gsonは @ Expose 注釈を提供して、スコープに基づいてクラスのJsonシリアル化/逆シリアル化を制御します。 @ Expose をサポートする変数を持つ次のクラスを検討してください。 このクラスでは、 name および rollno 変数がシリアル化のために公開されます。 次に、* GsonBuilder.excludeFieldsWithoutExposeAnnotation()*メソッドを使用して、公開された変数のみがシリアル化/逆シリアル化されることを示しました。 次の例を見てください。
例
C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。
*_File-GsonTester.java_*
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;
public class GsonTester {
public static void main(String args[]) {
GsonBuilder builder = new GsonBuilder();
builder.excludeFieldsWithoutExposeAnnotation();
Gson gson = builder.create();
Student student = new Student();
student.setRollNo(1);
student.setName("Mahesh Kumar");
student.setVerified(true);
student.setId(1);
student.className = "VI";
String jsonString = gson.toJson(student);
System.out.println(jsonString);
}
}
class Student {
@Expose
private int rollNo;
@Expose
private String name;
private boolean verified;
private int id;
public static String className;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setVerified(boolean verified) {
this.verified = verified;
}
public boolean isVerified() {
return verified;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
結果を検証する
次のように javac コンパイラを使用してクラスをコンパイルします-
C:\GSON_WORKSPACE>javac GsonTester.java
今すぐ GsonTester を実行して結果を確認します-
C:\GSON_WORKSPACE>java GsonTester
出力を確認する
{"rollNo":1,"name":"Mahesh Kumar"}