Gson - Guia Rápido

Google Gson é uma biblioteca simples baseada em Java para serializar objetos Java para JSON e vice-versa. É uma biblioteca de código aberto desenvolvida pelo Google.

Os pontos a seguir destacam por que você deve usar esta biblioteca -

  • Standardized - Gson é uma biblioteca padronizada gerenciada pelo Google.

  • Efficient - É uma extensão confiável, rápida e eficiente da biblioteca padrão Java.

  • Optimized - A biblioteca é altamente otimizada.

  • Support Generics - Fornece amplo suporte para genéricos.

  • Supports complex inner classes - Suporta objetos complexos com hierarquias de herança profundas.

Características do Gson

Aqui está uma lista de alguns dos recursos mais importantes do Gson -

  • Easy to use - A API Gson fornece uma fachada de alto nível para simplificar os casos de uso comumente usados.

  • No need to create mapping - Gson API fornece mapeamento padrão para a maioria dos objetos a serem serializados.

  • Performance- Gson é bastante rápido e consome pouca memória. É adequado para sistemas ou gráficos de objetos grandes.

  • Clean JSON - Gson cria um resultado JSON limpo e compacto que é fácil de ler.

  • No Dependency - A biblioteca Gson não requer nenhuma outra biblioteca além do JDK.

  • Open Source- A biblioteca Gson é de código aberto; está disponível gratuitamente.

Três maneiras de processar JSON

Gson fornece três maneiras alternativas de processar JSON -

API de streaming

Ele lê e grava conteúdo JSON como eventos discretos. JsonReader e JsonWriter ler / escrever os dados como token, referido como JsonToken.

É a abordagem mais poderosa entre as três abordagens para processar JSON. Tem a menor sobrecarga e é bastante rápido em operações de leitura / gravação. É análogo ao analisador Stax para XML.

Modelo de Árvore

Ele prepara uma representação em árvore na memória do documento JSON. Ele constrói uma árvore de nós JsonObject. É uma abordagem flexível e análoga ao analisador DOM para XML.

Ligação de dados

Ele converte JSON de e para POJO (Plain Old Java Object) usando o acessador de propriedade. Gson lê / grava JSON usando adaptadores de tipo de dados. É análogo ao analisador JAXB para XML.

Configuração de ambiente local

Se você ainda deseja configurar um ambiente local para a linguagem de programação Java, esta seção irá guiá-lo sobre como baixar e configurar o Java em sua máquina. Siga as etapas abaixo para configurar o ambiente.

Java SE está disponível gratuitamente no link Download Java . Então você baixa uma versão com base em seu sistema operacional.

Siga as instruções para baixar o Java e executar o .exepara instalar o Java em sua máquina. Depois de instalar o Java em sua máquina, você precisará definir as variáveis ​​de ambiente para apontar para seus diretórios de instalação corretos.

Configurando o caminho no Windows 2000 / XP

Supondo que você tenha instalado o Java no diretório c: \ Arquivos de programas \ java \ jdk -

  • Clique com o botão direito em 'Meu Computador' e selecione 'Propriedades'.

  • Clique no botão 'Variáveis ​​de ambiente' na guia 'Avançado'.

  • Em seguida, altere a variável 'Path' para que também contenha o caminho para o executável Java. Por exemplo, se o caminho estiver definido atualmente para 'C: \ WINDOWS \ SYSTEM32', altere seu caminho para 'C: \ WINDOWS \ SYSTEM32; c: \ Arquivos de programas \ java \ jdk \ bin'.

Configurando o Caminho no Windows 95/98 / ME

Supondo que você tenha instalado o Java no diretório c: \ Arquivos de programas \ java \ jdk -

  • Edite o arquivo 'C: \ autoexec.bat' e adicione a seguinte linha no final: 'SET PATH =% PATH%; C: \ Arquivos de programas \ java \ jdk \ bin'

Configurando o caminho para Linux, UNIX, Solaris, FreeBSD

A variável de ambiente PATHdeve ser definido para apontar para onde os binários Java foram instalados. Consulte a documentação do shell se tiver problemas para fazer isso.

Por exemplo, se você usar bash como seu shell, então você adicionaria a seguinte linha ao final de seu '.bashrc: export PATH = / path / to / java: $ PATH'

Editores Java populares

Para escrever seus programas Java, você precisará de um editor de texto. Existem alguns IDEs sofisticados disponíveis no mercado. Mas, por enquanto, você pode considerar um dos seguintes -

  • Notepad - No Windows, você pode usar qualquer editor de texto simples como o Notepad (recomendado para este tutorial) ou TextPad.

  • Netbeans - É um IDE Java de código aberto e gratuito que pode ser baixado de https://netbeans.org/index.html.

  • Eclipse - Também é um IDE Java desenvolvido pela comunidade de código aberto Eclipse e pode ser baixado de https://www.eclipse.org/.

Baixar Arquivo Gson

Baixe a versão mais recente do arquivo jar Gson em gson-2.3.1.jar. No momento em que este tutorial foi escrito, baixamos gson-2.3.1.jar e o copiamos para a pasta C: \> gson.

SO Nome do arquivo
janelas gson-2.3.1.jar
Linux gson-2.3.1.jar
Mac gson-2.3.1.jar

Definir ambiente Gson

Colocou o GSON_HOME variável de ambiente para apontar para o local do diretório base onde o jar Gson está armazenado em sua máquina.

SO Resultado
janelas Defina a variável de ambiente GSON_HOME para C: \ gson
Linux export GSON_HOME = / usr / local / gson
Mac export GSON_HOME = / Library / gson

Definir variável CLASSPATH

Colocou o CLASSPATH variável de ambiente para apontar para o local do jar Gson.

SO Resultado
janelas Defina a variável de ambiente CLASSPATH como% 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 :.

Antes de entrar nos detalhes da biblioteca Google Gson, vamos ver um aplicativo em ação. Neste exemplo, criamos umStudentclasse. Vamos criar uma string JSON com detalhes do aluno e desserializá-la parastudent objeto e serializá-lo em uma String JSON.

Exemplo

Crie um arquivo de classe Java denominado GsonTester em 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+ " ]"; 
   }  
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

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

Passos para lembrar

A seguir estão as etapas importantes a serem consideradas aqui.

Etapa 1 - Criar objeto Gson usando GsonBuilder

Crie um objeto Gson. É um objeto reutilizável.

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

Etapa 2 - desserializar JSON para objeto

Use o método fromJson () para obter o objeto do JSON. Passe a string Json / fonte da string Json e o tipo de objeto como parâmetro.

//Object to JSON Conversion 
Student student = gson.fromJson(jsonString, Student.class);

Etapa 3 - serializar objeto para JSON

Use o método toJson () para obter a representação da string JSON de um objeto.

//Object to JSON Conversion   
jsonString = gson.toJson(student);

Gson é a classe de ator principal da biblioteca Gson do Google. Ele fornece funcionalidades para converter objetos Java em construções JSON correspondentes e vice-versa. Gson é construído primeiro usando GsonBuilder e, em seguida, métodos toJson (Object) ou fromJson (String, Class) são usados ​​para ler / escrever construções JSON.

Declaração de Classe

A seguir está a declaração para com.google.gson.Gson classe -

public final class Gson 
   extends Object

Construtores

Sr. Não Construtor e descrição
1

Gson()

Constrói um objeto Gson com configuração padrão.

Métodos de aula

Sr. Não Método e Descrição
1

<T> T fromJson(JsonElement json, Class<T> classOfT)

Este método desserializa a leitura Json da árvore de análise especificada em um objeto do tipo especificado.

2

<T> T fromJson(JsonElement json, Type typeOfT)

Este método desserializa a leitura Json da árvore de análise especificada em um objeto do tipo especificado.

3

<T> T fromJson(JsonReader reader, Type typeOfT)

Lê o próximo valor JSON do leitor e o converte em um objeto do tipo typeOfT.

4

<T> T fromJson(Reader json, Class<T> classOfT)

Este método desserializa a leitura Json do leitor especificado em um objeto da classe especificada.

5

<T> T fromJson(Reader json, Type typeOfT)

Este método desserializa o Json lido do leitor especificado em um objeto do tipo especificado.

6

<T> T fromJson(String json, Class<T> classOfT)

Este método desserializa o Json especificado em um objeto da classe especificada.

7

<T> T fromJson(String json, Type typeOfT)

Este método desserializa o Json especificado em um objeto do tipo especificado.

8

<T> TypeAdapter<T> getAdapter(Class<T> type)

Retorna o adaptador de tipo para tipo.

9

<T> TypeAdapter<T> getAdapter(TypeToken<T> type)

Retorna o adaptador de tipo para tipo.

10

<T> TypeAdapter<T> getDelegateAdapter(TypeAdapterFactory skipPast, TypeToken<T> type)

Este método é usado para obter um adaptador de tipo alternativo para o tipo especificado.

11

String toJson(JsonElement jsonElement)

Converte uma árvore de JsonElements em sua representação JSON equivalente.

12

void toJson(JsonElement jsonElement, Appendable writer)

Grava o JSON equivalente para uma árvore de JsonElements.

13

void toJson(JsonElement jsonElement, JsonWriter writer)

Grava o JSON para jsonElement para o escritor.

14

String toJson(Object src)

Este método serializa o objeto especificado em sua representação Json equivalente.

15

void toJson(Object src, Appendable writer)

Este método serializa o objeto especificado em sua representação Json equivalente.

16

String toJson(Object src, Type typeOfSrc)

Este método serializa o objeto especificado, incluindo aqueles de tipos genéricos, em sua representação Json equivalente.

17

void toJson(Object src, Type typeOfSrc, Appendable writer)

Este método serializa o objeto especificado, incluindo aqueles de tipos genéricos, em sua representação Json equivalente.

18

void toJson(Object src, Type typeOfSrc, JsonWriter writer)

Grava a representação JSON de src do tipo typeOfSrc para o gravador.

19

JsonElement toJsonTree(Object src)

Este método serializa o objeto especificado em sua representação equivalente como uma árvore de JsonElements.

20

JsonElement toJsonTree(Object src, Type typeOfSrc)

Este método serializa o objeto especificado, incluindo aqueles de tipos genéricos, em sua representação equivalente como uma árvore de JsonElements.

21

String toString()

Métodos herdados

Esta classe herda métodos da seguinte classe -

  • java.lang.Object

Exemplo

Crie o seguinte programa Java usando qualquer editor de sua escolha e salve-o em, digamos, 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+ " ]"; 
   }  
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída

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

Vamos serializar um objeto Java em um arquivo Json e, em seguida, ler esse arquivo Json para obter o objeto de volta. Neste exemplo, criamos umStudentclasse. Vamos criar umstudent.json arquivo que terá um json representação de Student objeto.

Exemplo

Crie um arquivo de classe Java chamado GsonTester dentro C:\>GSON_WORKSPACE.

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

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída

Student [ name: Mahesh, age: 10 ]

A API Data Binding é usada para converter JSON para e de POJO (Plain Old Java Object) usando o acessador de propriedade ou usando anotações. É de dois tipos.

  • Primitives Data Binding - Converte JSON para e de objetos Java Maps, Lists, Strings, Numbers, Booleans e NULL.

  • Objects Data Binding - Converte JSON de e para qualquer tipo JAVA.

Gson lê / grava JSON para ambos os tipos de vinculação de dados. Data Binding é análogo ao analisador JAXB para XML.

Ligação de dados primitivos

A vinculação de dados primitivos refere-se ao mapeamento de JSON para tipos de dados JAVA Core e coleções embutidas. Gson fornece vários adaptadores embutidos que podem ser usados ​​para serializar / desserializar tipos de dados primitivos.

Exemplo

Vamos ver a vinculação de dados primitiva em ação. Aqui, mapearemos os tipos básicos JAVA diretamente para JSON e vice-versa.

Crie um arquivo de classe Java chamado GsonTester dentro 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();  
      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)); 
   } 
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

{ 
   name: "Mahesh Kumar", 
   rollNo: 1, 
   verified: false, 
   marks:[100,90,85] 
} 

name: Mahesh Kumar 
rollNo: 1 
verified: false 
marks:[100, 90, 85]

A vinculação de dados do objeto se refere ao mapeamento de JSON para qualquer objeto 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);

Exemplo

Vamos ver a vinculação de dados do objeto em ação. Aqui, mapearemos o objeto JAVA diretamente para JSON e vice-versa.

Crie um arquivo de classe Java chamado GsonTester em C: \> GSON_WORKSPACE.

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

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

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

O modelo de árvore prepara uma representação em árvore na memória do documento JSON. Ele constrói uma árvore de nós JsonObject. É uma abordagem flexível e análoga ao analisador DOM para XML.

Criar árvore de JSON

JsonParser fornece um ponteiro para o nó raiz da árvore após a leitura do JSON. O nó raiz pode ser usado para percorrer a árvore completa. Considere o seguinte fragmento de código para obter o nó raiz de uma String JSON fornecida.

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

Modelo de árvore transversal

Obtenha cada nó usando o caminho relativo ao nó raiz enquanto atravessa a árvore e processa os dados. O trecho de código a seguir mostra como você pode atravessar uma árvore.

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

Exemplo

Crie um arquivo de classe Java chamado GsonTester em 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() + " ");  
         } 
      } 
   }   
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

Name: Mahesh Kumar 
Age: 21 
Verified: No 
100 90 85

A API de streaming é usada para ler token JSON por token. Ele lê e grava conteúdo JSON como eventos discretos.JsonReader e JsonWriter ler / escrever os dados como token, referido como JsonToken.

É a abordagem mais poderosa entre as três abordagens para processar JSON. Tem a menor sobrecarga e é bastante rápido em operações de leitura / gravação. É análogo ao analisador Stax para XML.

Neste capítulo, mostraremos o uso de APIs de streaming GSON para ler dados JSON. A API de streaming funciona com o conceito de token e todos os detalhes do Json devem ser tratados com cuidado.

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

Exemplo

Vamos ver JsonReaderem ação. Crie um arquivo de classe Java chamadoGsonTester em C: \> GSON_WORKSPACE.

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

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

Name: Mahesh Kumar 
Age:21 
Verified:false 
Marks [ 100 90 85 ]

Neste capítulo, discutiremos a serialização / desserialização de arrays, coleções e genéricos.

Exemplo de array

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

Exemplo

Vamos ver a serialização / desserialização da matriz em ação. Crie um arquivo de classe Java chamadoGsonTester em 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));     
   }      
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

{marks:[100,90,85],names:["Ram","Shyam","Mohan"]} 
marks:[100, 90, 85] 
names:[Ram, Shyam, Mohan]

Exemplo de coleções

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>

Exemplo

Vamos ver a serialização / desserialização da coleção em ação. Crie um arquivo de classe Java chamadoGsonTester em 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);     
   }      
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

{marks:[100,90,85]} 
marks:[100, 90, 85]

Exemplo Genérico

Gson usa a API de reflexão Java para obter o tipo de objeto para o qual um texto Json deve ser mapeado. Mas com os genéricos, essas informações são perdidas durante a serialização. Para combater esse problema, Gson oferece uma classecom.google.gson.reflect.TypeToken para armazenar o tipo do objeto genérico.

Exemplo

Vamos ver a serialização / desserialização de genéricos em ação. Crie um arquivo de classe Java chamadoGsonTester em 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); 
   } 
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

{"shape":{"radius":5.0}} 
class com.google.gson.internal.LinkedTreeMap 
{radius = 5.0} 
0.0 
class Circle 
Circle 
78.5

Neste capítulo, explicaremos a serialização / desserialização de classes que possuem classes internas.

Exemplo de classe interna aninhada

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

Exemplo

Vamos ver um exemplo de serialização / desserialização de classe com uma classe interna em ação. Crie um arquivo de classe Java chamadoGsonTester em 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; 
   } 
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

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

Exemplo de classe interna estática aninhada

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

Exemplo

Vamos ver um exemplo de serialização / desserialização de classe com uma classe interna estática em ação. Crie um arquivo de classe Java denominado GsonTester em 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 = 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; 
   } 
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

{"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 realiza a serialização / desserialização de objetos usando seus adaptadores embutidos. Ele também oferece suporte a adaptadores personalizados. Vamos discutir como você pode criar um adaptador personalizado e como usá-lo.

Crie um adaptador personalizado

Crie um adaptador personalizado estendendo o TypeAdapterclasse e passando a ela o tipo de objeto de destino. Substituir oread e write métodos para realizar a desserialização e serialização personalizadas, respectivamente.

class StudentAdapter extends TypeAdapter<Student> { 
   @Override 
   public Student read(JsonReader reader) throws IOException { 
      ... 
   } 
   
   @Override 
   public void write(JsonWriter writer, Student student) throws IOException { 
   } 
}

Registre o adaptador personalizado

Registre o adaptador personalizado usando GsonBuilder e crie uma instância Gson usando GsonBuilder.

GsonBuilder builder = new GsonBuilder(); 
builder.registerTypeAdapter(Student.class, new StudentAdapter()); 
Gson gson = builder.create();

Use o adaptador

O Gson agora usará o adaptador personalizado para converter texto Json em objeto e vice-versa.

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

Exemplo

Vamos ver um exemplo de adaptador de tipo personalizado em ação. Crie um arquivo de classe Java chamadoGsonTester em 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+ "]"; 
   } 
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

Student[ name = Mahesh, roll no: 1] 
{ 
   "name": "Mahesh", 
   "rollNo": 1 
}

Gson por padrão gera conteúdo Json otimizado ignorando os valores NULL. Mas GsonBuilder fornece sinalizadores para mostrar valores NULL na saída Json usando oGsonBuilder.serializeNulls() método.

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

Exemplo sem chamada serializeNulls

Crie um arquivo de classe Java chamado GsonTester em C: \> GSON_WORKSPACE.

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

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

{"rollNo": 1} 
Student[ name = null, roll no: 1]

Exemplo com chamada serializeNulls

Crie um arquivo de classe Java denominado GsonTester em C: \> GSON_WORKSPACE.

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

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

{ 
   "rollNo": 1, 
   "name": null 
} 
Student[ name = null, roll no: 1]

Gson fornece @Sinceanotação para controlar a serialização / desserialização Json de uma classe com base em suas várias versões. Considere a seguinte classe com suporte para controle de versão. Nesta aula, definimos inicialmente duas variáveisrollNo e name e mais tarde, adicionamos verifiedcomo uma nova variável. Usando @Since, definimosrollNo e name a partir da versão 1.0 e verificado para ser da versão 1.1.

class Student { 
   @Since(1.0) 
   private int rollNo; 
   
   @Since(1.0) 
   private String name; 
   
   @Since(1.1) 
   private boolean verified;  
}

GsonBuilder fornece o setVersion() método para serializar essa classe com controle de versão.

GsonBuilder builder = new GsonBuilder(); 
builder.setVersion(1.0);   
Gson gson = builder.create();

Exemplo

Vamos ver um exemplo de suporte a versionamento em ação. Crie um arquivo de classe Java chamadoGsonTester em C: \> GSON_WORKSPACE.

Arquivo - 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; 
   } 
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída.

{"rollNo":1,"name":"Mahesh Kumar"} 
{"rollNo":1,"name":"Mahesh Kumar","verified":true}

Por padrão, GSON exclui campos temporários e estáticos do processo de serialização / desserialização. Vamos dar uma olhada no exemplo a seguir.

Exemplo

Crie um arquivo de classe Java chamado GsonTester em 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; 
   } 
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída

{"rollNo":1,"name":"Mahesh Kumar","verified":true}

Usando excludeFieldsWithModifiers

GsonBuilder fornece controle sobre a exclusão de campos com um modificador específico usando o método excludeFieldsWithModifiers () do processo de serialização / desserialização. Veja o seguinte exemplo.

Exemplo

Crie um arquivo de classe Java denominado GsonTester em C: \> GSON_WORKSPACE.

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

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída

{"rollNo":1,"name":"Mahesh Kumar","verified":true,"className":"VI"}

Usando a anotação @Expose

Gson fornece @Exposeanotação para controlar a serialização / desserialização Json de uma classe com base em seu escopo. Considere a seguinte classe com uma variável tendo@ExposeApoio, suporte. Nesta aula,name e rollnoas variáveis ​​devem ser expostas para serialização. Então nós usamos oGsonBuilder.excludeFieldsWithoutExposeAnnotation()método para indicar que apenas as variáveis ​​expostas devem ser serializadas / desserializadas. Veja o seguinte exemplo.

Exemplo

Crie um arquivo de classe Java chamado GsonTester em 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; 
   } 
}

Verifique o resultado

Compile as classes usando javac compilador da seguinte forma -

C:\GSON_WORKSPACE>javac GsonTester.java

Agora execute o GsonTester para ver o resultado -

C:\GSON_WORKSPACE>java GsonTester

Verifique a saída

{"rollNo":1,"name":"Mahesh Kumar"}