Gson-クイックガイド

Google Gsonは、JavaオブジェクトをJSONに、またはその逆にシリアル化するための単純なJavaベースのライブラリです。これは、Googleによって開発されたオープンソースライブラリです。

次の点は、このライブラリを使用する必要がある理由を強調しています-

  • Standardized − Gsonは、Googleが管理する標準化されたライブラリです。

  • Efficient −これは、Java標準ライブラリの信頼性が高く、高速で、効率的な拡張機能です。

  • Optimized −ライブラリは高度に最適化されています。

  • Support Generics −ジェネリックスを広範囲にサポートします。

  • Supports complex inner classes −深い継承階層を持つ複雑なオブジェクトをサポートします。

Gsonの特徴

これがGsonの最も顕著な特徴のいくつかのリストです-

  • Easy to use − Gson APIは、一般的に使用されるユースケースを簡素化するための高レベルのファサードを提供します。

  • No need to create mapping − Gson APIは、シリアル化されるほとんどのオブジェクトにデフォルトのマッピングを提供します。

  • Performance− Gsonは非常に高速で、メモリフットプリントが低くなっています。大きなオブジェクトのグラフやシステムに適しています。

  • Clean JSON − Gsonは、読みやすいクリーンでコンパクトなJSON結果を作成します。

  • No Dependency − Gsonライブラリは、JDK以外のライブラリを必要としません。

  • Open Source−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パーサーに類似しています。

ローカル環境のセットアップ

それでもJavaプログラミング言語のローカル環境をセットアップしたい場合は、このセクションで、マシンにJavaをダウンロードしてセットアップする方法について説明します。以下の手順で環境を設定してください。

Java SEは、Javaのダウンロードリンクから無料で入手できます。したがって、オペレーティングシステムに基づいたバージョンをダウンロードします。

指示に従ってJavaをダウンロードし、 .exeマシンにJavaをインストールします。マシンにJavaをインストールしたら、正しいインストールディレクトリを指すように環境変数を設定する必要があります。

Windows 2000 / XPでのパスの設定

Javaをc:\ Program Files \ java \ jdkディレクトリにインストールしたと仮定します-

  • 「マイコンピュータ」を右クリックし、「プロパティ」を選択します。

  • [詳細設定]タブの下にある[環境変数]ボタンをクリックします。

  • 次に、「Path」変数を変更して、Java実行可能ファイルへのパスも含まれるようにします。たとえば、パスが現在「C:\ WINDOWS \ SYSTEM32」に設定されている場合は、パスを「C:\ WINDOWS \ SYSTEM32; c:\ ProgramFiles \ java \ jdk \ bin」に変更します。

Windows 95/98 / MEでパスを設定する

Javaをc:\ Program Files \ java \ jdkディレクトリにインストールしたと仮定します-

  • 'C:\ autoexec.bat'ファイルを編集し、最後に次の行を追加します。 'SET PATH =%PATH%; C:\ Program Files \ java \ jdk \ bin'

Linux、UNIX、Solaris、FreeBSDのパスの設定

環境変数 PATHJavaバイナリがインストールされている場所を指すように設定する必要があります。これを行うのに問題がある場合は、シェルのドキュメントを参照してください。

たとえば、シェルとしてbashを使用する場合は、「。bashrc:export PATH = / path / to / java:$ PATH」の末尾に次の行を追加します。

人気のあるJavaエディター

Javaプログラムを作成するには、テキストエディタが必要です。市場にはかなりの数の洗練されたIDEがあります。しかし今のところ、あなたは次のいずれかを考えることができます-

  • Notepad − Windowsでは、メモ帳(このチュートリアルで推奨)やTextPadなどの単純なテキストエディターを使用できます。

  • Netbeans −オープンソースで無料のJava IDEであり、からダウンロードできます。 https://netbeans.org/index.html。

  • Eclipse −これはEclipseオープンソースコミュニティによって開発されたJava IDEでもあり、からダウンロードできます。 https://www.eclipse.org/。

Gsonアーカイブをダウンロード

Gsonjarファイルの最新バージョンをからダウンロードします。 gson-2.3.1.jar。このチュートリアルの執筆時点で、gson-2.3.1.jarをダウンロードし、C:\> gsonフォルダーにコピーしました。

OS アーカイブ名
ウィンドウズ gson-2.3.1.jar
Linux gson-2.3.1.jar
マック gson-2.3.1.jar

Gson環境を設定する

をセットする GSON_HOME Gsonjarがマシンに保存されているベースディレクトリの場所を指す環境変数。

OS 出力
ウィンドウズ 環境変数GSON_HOMEをC:\ gsonに設定します
Linux GSON_HOME = / usr / local / gsonをエクスポートします
マック GSON_HOME = / Library / gsonをエクスポートします

CLASSPATH変数を設定します

をセットする CLASSPATH Gsonjarの場所を指す環境変数。

OS 出力
ウィンドウズ 環境変数CLASSPATHを%CLASSPATH%;%GSON_HOME%\ gson-2.3.1.jar;。;に設定します。
Linux CLASSPATH = $ CLASSPATH:$ GSON_HOME /gson-2.3.1.jarをエクスポートします。
マック CLASSPATH = $ CLASSPATH:$ GSON_HOME /gson-2.3.1.jarをエクスポートします。

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は、GoogleGsonライブラリのメインアクタークラスです。Javaオブジェクトを一致するJSON構造に、またはその逆に変換する機能を提供します。Gsonは最初にGsonBuilderを使用して構築され、次にtoJson(Object)またはfromJson(String、Class)メソッドを使用してJSON構造を読み取り/書き込みします。

クラス宣言

以下はの宣言です com.google.gson.Gson クラス-

public final class Gson 
   extends Object

コンストラクター

シニア番号 コンストラクターと説明
1

Gson()

デフォルト設定でGsonオブジェクトを構築します。

クラスメソッド

シニア番号 方法と説明
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表現をwriterに書き込みます。

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 
}

JavaオブジェクトをJsonファイルにシリアル化し、そのJsonファイルを読み取ってオブジェクトを元に戻しましょう。この例では、Studentクラス。を作成しますstudent.json を持つファイル json の表現 Student オブジェクト。

名前の付いたJavaクラスファイルを作成します GsonTesterC:\>GSON_WORKSPACE

ファイル-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 ]

データバインディングAPIは、プロパティアクセサーまたはアノテーションを使用して、JSONをPOJO(Plain Old Java Object)との間で変換するために使用されます。2種類あります。

  • Primitives Data Binding − JSONをJavaマップ、リスト、文字列、数値、ブール値、およびNULLオブジェクトとの間で変換します。

  • Objects Data Binding −JSONを任意のJAVAタイプとの間で変換します。

Gsonは、両方のタイプのデータバインディングのJSONを読み取り/書き込みします。データバインディングは、XML用のJAXBパーサーに類似しています。

プリミティブデータバインディング

プリミティブデータバインディングとは、JSONからJAVAコアデータ型および組み込みコレクションへのマッピングを指します。Gsonは、プリミティブデータ型をシリアル化/逆シリアル化するために使用できるさまざまな組み込みアダプターを提供します。

プリミティブデータバインディングの動作を見てみましょう。ここでは、JAVAの基本型をJSONに直接マッピングします。その逆も同様です。

名前の付いたJavaクラスファイルを作成します GsonTesterC:\>Gson_WORKSPACE

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]

オブジェクトデータバインディングとは、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に直接マッピングします。その逆も同様です。

名前の付いたJavaクラスファイルを作成します GsonTester C:\> GSON_WORKSPACEで。

ファイル-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 ]

ツリーモデルは、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());

名前の付いたJavaクラスファイルを作成します GsonTester C:\> GSON_WORKSPACEで。

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

ストリーミング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動作中。名前の付いたJavaクラスファイルを作成しますGsonTester C:\> GSON_WORKSPACEで。

ファイル-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 ]

この章では、配列、コレクション、およびジェネリックのシリアル化/逆シリアル化について説明します。

配列の例

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));

配列のシリアル化/逆シリアル化の動作を見てみましょう。名前の付いたJavaクラスファイルを作成しますGsonTester C:\> GSON_WORKSPACEで。

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>

コレクションのシリアル化/逆シリアル化の動作を見てみましょう。名前の付いたJavaクラスファイルを作成しますGsonTester C:\> GSON_WORKSPACEで。

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のシリアル化/逆シリアル化の動作を見てみましょう。名前の付いたJavaクラスファイルを作成しますGsonTester C:\> GSON_WORKSPACEで。

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

この章では、内部クラスを持つクラスのシリアル化/逆シリアル化について説明します。

ネストされたインナークラスの例

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());

内部クラスが動作しているクラスのシリアル化/逆シリアル化の例を見てみましょう。名前の付いたJavaクラスファイルを作成しますGsonTester C:\> GSON_WORKSPACEで。

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は、組み込みのアダプターを使用してオブジェクトのシリアル化/逆シリアル化を実行します。また、カスタムアダプタもサポートしています。カスタムアダプタを作成する方法とその使用方法について説明しましょう。

カスタムアダプタを作成する

を拡張してカスタムアダプタを作成します 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を使用してカスタムアダプタを登録し、を使用してGsonインスタンスを作成します GsonBuilder

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);

動作中のカスタムタイプアダプタの例を見てみましょう。名前の付いたJavaクラスファイルを作成しますGsonTester C:\> GSON_WORKSPACEで。

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値を無視して最適化されたJsonコンテンツを生成します。ただし、GsonBuilderは、を使用してJson出力にNULL値を表示するフラグを提供します。GsonBuilder.serializeNulls() 方法。

GsonBuilder builder = new GsonBuilder(); 
builder.serializeNulls(); 
Gson gson = builder.create();

serializeNulls呼び出しのない例

名前の付いたJavaクラスファイルを作成します GsonTester C:\> GSON_WORKSPACEで。

ファイル-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は提供します @Sinceさまざまなバージョンに基づいてクラスのJsonシリアル化/逆シリアル化を制御するためのアノテーション。バージョン管理をサポートする次のクラスを検討してください。このクラスでは、最初に2つの変数を定義しましたrollNo そして name その後、追加しました verified新しい変数として。@Sinceを使用して、rollNo そして name バージョン1.0以降、バージョン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();

実際のバージョン管理サポートの例を見てみましょう。名前の付いたJavaクラスファイルを作成しますGsonTester C:\> GSON_WORKSPACEで。

ファイル-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はシリアル化/逆シリアル化プロセスから一時フィールドと静的フィールドを除外します。次の例を見てみましょう。

名前の付いたJavaクラスファイルを作成します GsonTester 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[]) { 
   
      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()公開された変数のみがシリアル化/逆シリアル化されることを示すメソッド。次の例を参照してください。

名前の付いたJavaクラスファイルを作成します GsonTester C:\> GSON_WORKSPACEで。

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"}