目录

Gson - 快速指南

Gson - Overview

Google Gson是一个简单的基于Java的库,用于将Java对象序列化为JSON,反之亦然。 它是由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 - 除了JDK之外,Gson库不需要任何其他库。

  • Open Source - Gson库是开源的; 它是免费提供的。

处理JSON的三种方法

Gson提供了三种处理JSON的替代方法 -

流式API

它将JSON内容读写为离散事件。 JsonReaderJsonWriter将数据读/写为令牌,称为JsonToken

它是处理JSON的三种方法中最强大的方法。 它具有最低的开销,并且在读/写操作中非常快。 它类似于XML的Stax解析器。

树模型

它准备了JSON文档的内存树表示。 它构建了一个JsonObject节点树。 它是一种灵活的方法,类似于XML的DOM解析器。

数据绑定

它使用属性访问器将JSON转换为POJO(Plain Old Java Object)。 Gson使用数据类型适配器读/写JSON。 它类似于XML的JAXB解析器。

Gson - Environment Setup

Try it Option Online

您不必设置自己的环境即可开始学习Gson。 我们已经为您建立了一个在线Java编程环境。 该平台允许您在线编译和执行所有可用示例,并使用不同选项分析输出。 我们相信它会增强您的信心,让您的学习成为一种愉快的活动。 随意修改任何示例并在线执行。

使用以下示例代码框右上角的“ Try it选项, Try it以下示例 -

public class MyFirstJavaProgram {  
   public static void main(String []args) { 
      System.out.println("Hello World"); 
   } 
}

对于本教程中给出的大多数示例,您将找到Try it选项。 请使用此选项,享受您的学习。

本地环境设置 (Local Environment Setup)

如果您仍想为Java编程语言设置本地环境,那么本节将指导您如何在计算机上下载和设置Java。 请按照下面给出的步骤设置环境。

Java SE可从链接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二进制文件的位置。 如果您在执行此操作时遇到问题,请参阅您的shell文档。

例如,如果您使用bash作为shell,那么您可以将以下行添加到'.bashrc的末尾:export PATH =/path/to/java:$ PATH'

流行的Java编辑器 (Popular Java Editors)

要编写Java程序,您需要一个文本编辑器。 市场上有很多复杂的IDE。 但就目前而言,您可以考虑以下其中一项 -

  • Notepad - 在Windows上,您可以使用任何简单的文本编辑器,如记事本(本教程推荐)或TextPad。

  • Netbeans - 这是一个开源且免费的Java IDE,可以从https://netbeans.org/index.html下载。

  • Eclipse - 它也是由Eclipse开源社区开发的Java IDE,可以从https://www.eclipse.org/下载。

下载Gson档案

从gson-2.3.1.jar下载最新版本的Gson jar文件。 在编写本教程时,我们下载了gson-2.3.1.jar并将其复制到C:\> gson文件夹中。

OS 存档名称
Windowsgson-2.3.1.jar
Linuxgson-2.3.1.jar
Macgson-2.3.1.jar

设置Gson Environment

GSON_HOME环境变量设置为指向计算机上存储Gson jar的基本目录位置。

OS output
Windows 将环境变量GSON_HOME设置为C:\gson
Linux export GSON_HOME =/usr/local/gson
Mac export GSON_HOME =/Library/gson

设置CLASSPATH变量

CLASSPATH环境变量设置为指向Gson jar位置。

OS output
Windows 将环境变量CLASSPATH设置为%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 - First Application

在进入Google Gson库的详细信息之前,让我们看一下应用程序的运行情况。 在这个例子中,我们创建了一个Student类。 我们将创建一个包含学生详细信息的JSON字符串,并将其反序列化为student对象,然后将其序列化为JSON字符串。

例子 (Example)

在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反序列化为Object

使用fromJson()方法从JSON获取Object。 将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 Class

Gson是Google Gson库的主要演员类。 它提供了将Java对象转换为匹配JSON结构的功能,反之亦然。 首先使用GsonBuilder构造Gson,然后使用toJson(Object)或fromJson(String,Class)方法来读/写JSON结构。

Class 声明 (Class Declaration)

以下是com.google.gson.Gson类的声明 -

public final class Gson 
   extends Object 

构造函数 (Constructors)

S.No 构造函数和描述
1

Gson()

使用默认配置构造Gson对象。

Class Methods

S.No 方法和描述
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)

从reader读取下一个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写入writer。

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

例子 (Example)

使用您选择的任何编辑器创建以下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 - Object Serialization

让我们将Java对象序列化为Json文件,然后读取该Json文件以获取该对象。 在这个例子中,我们创建了一个Student类。 我们将创建一个student.json文件,该文件将具有Student对象的json表示。

例子 (Example)

C:\》GSON_WORKSPACE创建名为GsonTester的Java类文件。

File: 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 - Data Binding

Data Binding API用于使用属性访问器或使用注释将JSON转换为POJO(Plain Old Java Object)和从POJO(Plain Old Java Object)转换JSON。 它有两种类型。

  • Primitives Data Binding - 将JSON转换为Java地图,列表,字符串,数字,布尔值和NULL对象。

  • Objects Data Binding - 将JSON转换为任何JAVA类型。

Gson为两种类型的数据绑定读取/写入JSON。 数据绑定类似于XML的JAXB解析器。

基元数据绑定

基本类型(Primitive)数据绑定是指将JSON映射到JAVA核心数据类型和内置集合。 Gson提供了各种内置适配器,可用于序列化/反序列化原始数据类型。

例子 (Example)

让我们看看原始数据绑定在行动中。 在这里,我们将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 - Object Data Binding

对象数据绑定是指将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);

例子 (Example)

让我们看看对象数据的绑定。 在这里,我们将JAVA Object直接映射到JSON,反之亦然。

在C:\“GSON_WORKSPACE中创建名为GsonTester的Java类文件。

File: 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+ " ]"; 
   }  
}

验证结果 (Verify the result)

使用javac编译器编译类如下 -

C:\GSON_WORKSPACE>javac GsonTester.java

现在运行GsonTester查看结果 -

C:\GSON_WORKSPACE>java GsonTester

验证输出。

{"name":"Mahesh","age":10} 
Student [ name: Mahesh, age: 10 ]

Gson - Tree Model

树模型准备JSON文档的内存树表示。 它构建了一个JsonObject节点树。 它是一种灵活的方法,类似于XML的DOM解析器。

从JSON创建树

在读取JSON之后,JsonParser提供指向树的根节点的指针。 根节点可用于遍历完整的树。 请考虑以下代码段以获取提供的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()); 

例子 (Example)

在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 - Streaming

Streaming API用于通过令牌读取JSON令牌。 它将JSON内容读写为离散事件。 JsonReaderJsonWriter将数据读/写为令牌,称为JsonToken

它是处理JSON的三种方法中最强大的方法。 它具有最低的开销,并且在读/写操作中非常快。 它类似于XML的Stax解析器。

在本章中,我们将展示使用GSON流API来读取JSON数据。 Streaming API与token的概念一起使用,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(); 
}

例子 (Example)

让我们看看JsonReader情况。 在C:\“GSON_WORKSPACE中创建名为GsonTester的Java类文件。

File: 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() + " ");            
         } 
      } 
   } 
}

验证结果 (Verify the result)

使用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 - Serialization Examples

在本章中,我们将讨论数组,集合和泛型的序列化/反序列化。

数组示例

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

例子 (Example)

让我们看看阵列序列化/反序列化的实际应用。 在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>

例子 (Example)

让我们看一下Collection序列化/反序列化的实际应用。 在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类来存储通用对象的类型。

例子 (Example)

让我们看一下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 - Serializing Inner Classes

在本章中,我们将解释具有内部类的类的序列化/反序列化。

嵌套的内部类示例

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

例子 (Example)

让我们看一个带有内部类的类的序列化/反序列化的示例。 在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()); 

例子 (Example)

让我们看一个带有静态内部类的类的序列化/反序列化的示例。 在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 - Custom Type Adapters

Gson使用其内置适配器执行对象的序列化/反序列化。 它还支持自定义适配器。 我们将讨论如何创建自定义适配器以及如何使用它。

创建自定义适配器

通过扩展TypeAdapter类并将其传递给目标对象的类型来创建自定义适配器。 重写readwrite方法以分别执行自定义反序列化和序列化。

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

例子 (Example)

让我们看一下自定义类型适配器的实例。 在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 Object Support

默认情况下,Gson生成优化的Json内容,忽略NULL值。 但是GsonBuilder使用GsonBuilder.serializeNulls()方法提供了在Json输出中显示NULL值的标志。

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

没有serializeNulls调用的示例

在C:\“GSON_WORKSPACE中创建名为GsonTester的Java类文件。

File: 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类文件。

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

Gson提供@Since注释来控制基于其各种版本的类的Json序列化/反序列化。 考虑以下具有版本控制支持的类。 在这个类中,我们最初定义了两个变量rollNoname以及稍后,我们添加了verified为新变量。 使用@Since,我们已经定义了版本1.0的rollNoname ,并验证了版本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();

例子 (Example)

让我们看一下版本支持的实例。 在C:\“GSON_WORKSPACE中创建名为GsonTester的Java类文件。

File: 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; 
   } 
} 

验证结果 (Verify the result)

使用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 - Excluding fields from Serialization

默认情况下,GSON从序列化/反序列化过程中排除瞬态和静态字段。 我们来看看下面的例子。

例子 (Example)

在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()方法控制使用特定修饰符排除字段。 请参阅以下示例。

例子 (Example)

在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 Annotation

Gson提供@Expose注释来根据其范围控制类的Json序列化/反序列化。 考虑以下具有@Expose支持的变量的类。 在此类中,将公开namerollno变量以进行序列化。 然后我们使用GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法来指示只有序列化/反序列化的公开变量。 请参阅以下示例。

例子 (Example)

在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"} 
↑回到顶部↑
WIKI教程 @2018