Gson - szybki przewodnik
Google Gson to prosta biblioteka oparta na języku Java do serializacji obiektów Java do formatu JSON i odwrotnie. Jest to biblioteka open source opracowana przez Google.
Poniższe punkty wyjaśniają, dlaczego powinieneś używać tej biblioteki -
Standardized - Gson to ustandaryzowana biblioteka zarządzana przez Google.
Efficient - Jest to niezawodne, szybkie i wydajne rozszerzenie standardowej biblioteki Java.
Optimized - Biblioteka jest wysoce zoptymalizowana.
Support Generics - Zapewnia szerokie wsparcie dla leków generycznych.
Supports complex inner classes - Obsługuje złożone obiekty z głębokimi hierarchiami dziedziczenia.
Funkcje Gson
Oto lista niektórych z najważniejszych cech Gson -
Easy to use - Gson API zapewnia fasadę wysokiego poziomu w celu uproszczenia często używanych przypadków użycia.
No need to create mapping - Interfejs API Gson zapewnia domyślne mapowanie dla większości obiektów przeznaczonych do serializacji.
Performance- Gson jest dość szybki i zajmuje mało pamięci. Jest odpowiedni dla dużych grafów obiektów lub systemów.
Clean JSON - Gson tworzy czysty i zwarty wynik JSON, który jest łatwy do odczytania.
No Dependency - Biblioteka Gson nie wymaga żadnej innej biblioteki poza JDK.
Open Source- Biblioteka Gson jest open source; jest ogólnie dostępny.
Trzy sposoby przetwarzania JSON
Gson zapewnia trzy alternatywne sposoby przetwarzania JSON -
Streaming API
Odczytuje i zapisuje zawartość JSON jako dyskretne zdarzenia. JsonReader i JsonWriter odczytać / zapisać dane jako token, o którym mowa w JsonToken.
Jest to najpotężniejsze podejście spośród trzech podejść do przetwarzania JSON. Ma najniższe narzuty i jest dość szybki w operacjach odczytu / zapisu. Jest analogiczny do parsera Stax dla XML.
Model drzewa
Przygotowuje reprezentację drzewa dokumentu JSON w pamięci. Tworzy drzewo węzłów JsonObject. Jest to elastyczne podejście i jest analogiczne do parsera DOM dla XML.
Wiązanie danych
Konwertuje JSON do iz POJO (zwykły stary obiekt Java) przy użyciu metody dostępu do właściwości. Gson odczytuje / zapisuje JSON przy użyciu adapterów typu danych. Jest analogiczny do parsera JAXB dla XML.
Konfiguracja środowiska lokalnego
Jeśli nadal chcesz skonfigurować środowisko lokalne dla języka programowania Java, w tej sekcji znajdziesz wskazówki, jak pobrać i skonfigurować Javę na swoim komputerze. Wykonaj poniższe czynności, aby skonfigurować środowisko.
Java SE jest dostępna bezpłatnie pod linkiem Pobierz Javę . Więc pobierasz wersję opartą na twoim systemie operacyjnym.
Postępuj zgodnie z instrukcjami, aby pobrać Javę i uruchomić .exeaby zainstalować Javę na swoim komputerze. Po zainstalowaniu Javy na komputerze należałoby ustawić zmienne środowiskowe, aby wskazywały na ich prawidłowe katalogi instalacyjne.
Konfigurowanie ścieżki w systemie Windows 2000 / XP
Zakładając, że zainstalowałeś Javę w katalogu c: \ Program Files \ java \ jdk -
Kliknij prawym przyciskiem myszy „Mój komputer” i wybierz „Właściwości”.
Kliknij przycisk „Zmienne środowiskowe” w zakładce „Zaawansowane”.
Następnie zmień zmienną „Path”, tak aby zawierała również ścieżkę do pliku wykonywalnego Java. Na przykład, jeśli ścieżka jest obecnie ustawiona na „C: \ WINDOWS \ SYSTEM32”, zmień ścieżkę na „C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin”.
Konfigurowanie ścieżki w Windows 95/98 / ME
Zakładając, że zainstalowałeś Javę w katalogu c: \ Program Files \ java \ jdk -
Edytuj plik „C: \ autoexec.bat” i dodaj na końcu następujący wiersz: „SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin”
Konfigurowanie ścieżki dla systemów Linux, UNIX, Solaris, FreeBSD
Zmienna środowiskowa PATHpowinien być ustawiony tak, aby wskazywał, gdzie zostały zainstalowane pliki binarne Java. Zajrzyj do dokumentacji powłoki, jeśli masz z tym problem.
Na przykład, jeśli używasz bash jako powłoki, dodasz następujący wiersz na końcu swojego '.bashrc: export PATH = / path / to / java: $ PATH'
Popularne edytory Java
Do pisania programów w języku Java potrzebny będzie edytor tekstu. Na rynku dostępnych jest kilka wyrafinowanych IDE. Ale na razie możesz rozważyć jedną z następujących rzeczy -
Notepad - W systemie Windows możesz użyć dowolnego prostego edytora tekstu, takiego jak Notatnik (zalecany w tym samouczku) lub TextPad.
Netbeans - Jest to środowisko Java IDE o otwartym kodzie źródłowym i bezpłatne, które można pobrać z witryny https://netbeans.org/index.html.
Eclipse - Jest to również środowisko Java IDE opracowane przez społeczność Open Source Eclipse i można je pobrać z witryny https://www.eclipse.org/.
Pobierz archiwum Gson
Pobierz najnowszą wersję pliku jar Gson z witryny gson-2.3.1.jar. W czasie pisania tego samouczka pobraliśmy plik gson-2.3.1.jar i skopiowaliśmy go do folderu C: \> gson.
OS | Nazwa archiwum |
---|---|
Windows | gson-2.3.1.jar |
Linux | gson-2.3.1.jar |
Prochowiec | gson-2.3.1.jar |
Ustaw środowisko Gson
Ustaw GSON_HOME zmienna środowiskowa, aby wskazać lokalizację katalogu podstawowego, w którym jest przechowywany plik Gson jar na komputerze.
OS | Wynik |
---|---|
Windows | Ustaw zmienną środowiskową GSON_HOME na C: \ gson |
Linux | export GSON_HOME = / usr / local / gson |
Prochowiec | eksportuj GSON_HOME = / Library / gson |
Ustaw zmienną CLASSPATH
Ustaw CLASSPATH zmienna środowiskowa wskazująca lokalizację jar Gson.
OS | Wynik |
---|---|
Windows | Ustaw zmienną środowiskową CLASSPATH na% CLASSPATH%;% GSON_HOME% \ gson-2.3.1.jar;.; |
Linux | eksportuj CLASSPATH = $ CLASSPATH: $ GSON_HOME / gson-2.3.1.jar :. |
Prochowiec | eksportuj CLASSPATH = $ CLASSPATH: $ GSON_HOME / gson-2.3.1.jar :. |
Zanim przejdziemy do szczegółów biblioteki Google Gson, zobaczmy, jak działa aplikacja. W tym przykładzie utworzyliśmy plikStudentklasa. Utworzymy ciąg JSON ze szczegółami ucznia i deserializujemy go dostudent obiektu, a następnie serializuj go do ciągu JSON.
Przykład
Utwórz plik klasy Java o nazwie GsonTester w 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+ " ]";
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester, aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
Student [ name: Mahesh, age: 21 ]
{
"name" : "Mahesh",
"age" : 21
}
Kroki do zapamiętania
Poniżej przedstawiono ważne kroki, które należy tutaj rozważyć.
Krok 1 - Utwórz obiekt Gson za pomocą GsonBuilder
Utwórz obiekt Gson. Jest to przedmiot wielokrotnego użytku.
GsonBuilder builder = new GsonBuilder();
builder.setPrettyPrinting();
Gson gson = builder.create();
Krok 2 - Deserializacja JSON do obiektu
Użyj metody fromJson (), aby pobrać obiekt z JSON. Przekaż ciąg Json / źródło ciągu Json i typ obiektu jako parametr.
//Object to JSON Conversion
Student student = gson.fromJson(jsonString, Student.class);
Krok 3 - Serializacja obiektu do formatu JSON
Użyj metody toJson (), aby uzyskać reprezentację obiektu w postaci ciągu JSON.
//Object to JSON Conversion
jsonString = gson.toJson(student);
Gson to główna klasa aktorów w bibliotece Google Gson. Zapewnia funkcje umożliwiające konwersję obiektów Java do zgodnych konstrukcji JSON i odwrotnie. Gson jest najpierw konstruowany przy użyciu GsonBuilder, a następnie metody toJson (Object) lub fromJson (String, Class) są używane do odczytu / zapisu konstrukcji JSON.
Deklaracja klasy
Poniżej znajduje się deklaracja dla com.google.gson.Gson klasa -
public final class Gson
extends Object
Konstruktorzy
Sr.No | Konstruktor i opis |
---|---|
1 | Gson() Konstruuje obiekt Gson z domyślną konfiguracją. |
Metody klasowe
Sr.No | Metoda i opis |
---|---|
1 | <T> T fromJson(JsonElement json, Class<T> classOfT) Ta metoda deserializuje Json odczytaną z określonego drzewa analizy do obiektu określonego typu. |
2 | <T> T fromJson(JsonElement json, Type typeOfT) Ta metoda deserializuje Json odczytaną z określonego drzewa analizy do obiektu określonego typu. |
3 | <T> T fromJson(JsonReader reader, Type typeOfT) Odczytuje następną wartość JSON z czytnika i konwertuje ją na obiekt typu typeOfT. |
4 | <T> T fromJson(Reader json, Class<T> classOfT) Ta metoda deserializuje Json odczytaną z określonego czytnika do obiektu określonej klasy. |
5 | <T> T fromJson(Reader json, Type typeOfT) Ta metoda deserializuje Json odczytaną z określonego czytnika do obiektu określonego typu. |
6 | <T> T fromJson(String json, Class<T> classOfT) Ta metoda deserializuje określony Json do obiektu określonej klasy. |
7 | <T> T fromJson(String json, Type typeOfT) Ta metoda deserializuje określony plik Json do obiektu określonego typu. |
8 | <T> TypeAdapter<T> getAdapter(Class<T> type) Zwraca adapter typu dla typu. |
9 | <T> TypeAdapter<T> getAdapter(TypeToken<T> type) Zwraca adapter typu dla typu. |
10 | <T> TypeAdapter<T> getDelegateAdapter(TypeAdapterFactory skipPast, TypeToken<T> type) Ta metoda służy do pobierania adaptera alternatywnego typu dla określonego typu. |
11 | String toJson(JsonElement jsonElement) Konwertuje drzewo JsonElements na jego równoważną reprezentację JSON. |
12 | void toJson(JsonElement jsonElement, Appendable writer) Zapisuje równoważny kod JSON dla drzewa JsonElements. |
13 | void toJson(JsonElement jsonElement, JsonWriter writer) Zapisuje JSON dla jsonElement do programu Writer. |
14 | String toJson(Object src) Ta metoda serializuje określony obiekt do jego równoważnej reprezentacji Json. |
15 | void toJson(Object src, Appendable writer) Ta metoda serializuje określony obiekt do jego równoważnej reprezentacji Json. |
16 | String toJson(Object src, Type typeOfSrc) Ta metoda serializuje określony obiekt, w tym typy typów ogólnych, do jego równoważnej reprezentacji Json. |
17 | void toJson(Object src, Type typeOfSrc, Appendable writer) Ta metoda serializuje określony obiekt, w tym typy typów ogólnych, do jego równoważnej reprezentacji Json. |
18 | void toJson(Object src, Type typeOfSrc, JsonWriter writer) Zapisuje reprezentację JSON src typu typeOfSrc do programu Writer. |
19 | JsonElement toJsonTree(Object src) Ta metoda serializuje określony obiekt do jego równoważnej reprezentacji jako drzewo JsonElements. |
20 | JsonElement toJsonTree(Object src, Type typeOfSrc) Ta metoda serializuje określony obiekt, w tym typy typów ogólnych, do jego równoważnej reprezentacji jako drzewo JsonElements. |
21 | String toString() |
Dziedziczone metody
Ta klasa dziedziczy metody z następującej klasy -
- java.lang.Object
Przykład
Utwórz następujący program Java za pomocą dowolnego wybranego edytora i zapisz go w, powiedzmy, 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+ " ]";
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester, aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe
Student [ name: Mahesh, age: 21 ]
{
"name" : "Mahesh",
"age" : 21
}
Zserializujmy obiekt Java do pliku Json, a następnie przeczytajmy ten plik Json, aby odzyskać obiekt. W tym przykładzie utworzyliśmy plikStudentklasa. Stworzymy plikstudent.json plik, który będzie miał rozszerzenie json Reprezentacja Student obiekt.
Przykład
Utwórz plik klasy Java o nazwie GsonTester w C:\>GSON_WORKSPACE.
Plik - 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+ " ]";
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester, aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe
Student [ name: Mahesh, age: 10 ]
Interfejs API wiązania danych służy do konwertowania JSON do iz POJO (zwykły stary obiekt Java) za pomocą metody dostępu do właściwości lub adnotacji. Jest dwojakiego rodzaju.
Primitives Data Binding - Konwertuje JSON do iz obiektów Java Maps, Lists, Strings, Numbers, Booleans i NULL.
Objects Data Binding - Konwertuje JSON na iz dowolnego typu JAVA.
Gson odczytuje / zapisuje JSON dla obu typów powiązań danych. Wiązanie danych jest analogiczne do parsera JAXB dla XML.
Wiązanie danych prymitywów
Powiązanie danych pierwotnych odnosi się do mapowania typów danych JSON na JAVA Core i wbudowanych kolekcji. Gson udostępnia różne wbudowane adaptery, których można używać do serializacji / deserializacji pierwotnych typów danych.
Przykład
Zobaczmy, jak działa prymitywne powiązanie danych. Tutaj zmapujemy podstawowe typy JAVA bezpośrednio na JSON i odwrotnie.
Utwórz plik klasy Java o nazwie GsonTester w 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));
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
{
name: "Mahesh Kumar",
rollNo: 1,
verified: false,
marks:[100,90,85]
}
name: Mahesh Kumar
rollNo: 1
verified: false
marks:[100, 90, 85]
Powiązanie danych obiektu odnosi się do mapowania JSON na dowolny obiekt 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);
Przykład
Zobaczmy, jak działa powiązanie danych obiektu. Tutaj zmapujemy obiekt JAVA bezpośrednio na JSON i odwrotnie.
Utwórz plik klasy Java o nazwie GsonTester w C: \> GSON_WORKSPACE.
Plik - 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+ " ]";
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
{"name":"Mahesh","age":10}
Student [ name: Mahesh, age: 10 ]
Model drzewa przygotowuje reprezentację drzewa dokumentu JSON w pamięci. Tworzy drzewo węzłów JsonObject. Jest to elastyczne podejście i jest analogiczne do parsera DOM dla XML.
Utwórz drzewo z formatu JSON
JsonParser udostępnia wskaźnik do węzła głównego drzewa po odczytaniu kodu JSON. Węzeł główny może służyć do przechodzenia przez całe drzewo. Rozważ poniższy fragment kodu, aby pobrać węzeł główny podanego ciągu 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);
Model drzewa przechodzenia
Pobierz każdy węzeł za pomocą ścieżki względnej do węzła głównego podczas przeglądania drzewa i przetwarzania danych. Poniższy fragment kodu pokazuje, jak można przechodzić przez drzewo.
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());
Przykład
Utwórz plik klasy Java o nazwie GsonTester w 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() + " ");
}
}
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
Name: Mahesh Kumar
Age: 21
Verified: No
100 90 85
Streaming API służy do odczytywania tokenu JSON po tokenie. Odczytuje i zapisuje zawartość JSON jako dyskretne zdarzenia.JsonReader i JsonWriter odczytać / zapisać dane jako token, o którym mowa w JsonToken.
Jest to najpotężniejsze podejście spośród trzech podejść do przetwarzania JSON. Ma najniższe narzuty i jest dość szybki w operacjach odczytu / zapisu. Jest analogiczny do parsera Stax dla XML.
W tym rozdziale pokażemy użycie interfejsów API przesyłania strumieniowego GSON do odczytu danych JSON. Streaming API działa z koncepcją tokena, a każdy szczegół Json musi być traktowany ostrożnie.
//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();
}
Przykład
Zobaczmy JsonReaderw akcji. Utwórz plik klasy Java o nazwieGsonTester w C: \> GSON_WORKSPACE.
Plik - 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() + " ");
}
}
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
Name: Mahesh Kumar
Age:21
Verified:false
Marks [ 100 90 85 ]
W tym rozdziale omówimy serializację / deserializację tablic, kolekcji i typów generycznych.
Przykład tablicy
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));
Przykład
Zobaczmy, jak działa serializacja / deserializacja tablicy. Utwórz plik klasy Java o nazwieGsonTester w 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));
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester, aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
{marks:[100,90,85],names:["Ram","Shyam","Mohan"]}
marks:[100, 90, 85]
names:[Ram, Shyam, Mohan]
Przykład kolekcji
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>
Przykład
Zobaczmy, jak działa serializacja / deserializacja kolekcji. Utwórz plik klasy Java o nazwieGsonTester w 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);
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
{marks:[100,90,85]}
marks:[100, 90, 85]
Przykład generyczny
Gson używa interfejsu API odbicia języka Java, aby uzyskać typ obiektu, na który ma być mapowany tekst Json. Jednak w przypadku typów ogólnych te informacje są tracone podczas serializacji. Aby przeciwdziałać temu problemowi, Gson zapewnia klasęcom.google.gson.reflect.TypeToken do przechowywania typu obiektu ogólnego.
Przykład
Zobaczmy, jak działa serializacja / deserializacja typów generycznych. Utwórz plik klasy Java o nazwieGsonTester w 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);
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
{"shape":{"radius":5.0}}
class com.google.gson.internal.LinkedTreeMap
{radius = 5.0}
0.0
class Circle
Circle
78.5
W tym rozdziale wyjaśnimy serializację / deserializację klas posiadających klasy wewnętrzne.
Przykład zagnieżdżonej klasy wewnętrznej
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());
Przykład
Zobaczmy przykład serializacji / deserializacji klasy z klasą wewnętrzną w akcji. Utwórz plik klasy Java o nazwieGsonTester w 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;
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester, aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
{"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
Przykład zagnieżdżonej statycznej klasy wewnętrznej
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());
Przykład
Zobaczmy przykład serializacji / deserializacji klasy ze statyczną klasą wewnętrzną w akcji. Utwórz plik klasy Java o nazwie GsonTester w 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;
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
{"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 wykonuje serializację / deserializację obiektów przy użyciu wbudowanych adapterów. Obsługuje również niestandardowe adaptery. Omówmy, jak można utworzyć niestandardowy adapter i jak go używać.
Utwórz niestandardowy adapter
Utwórz adapter niestandardowy, rozszerzając rozszerzenie TypeAdapterklasa i przekazanie jej typu obiektu docelowego. Zastąpread i write metody do wykonania odpowiednio deserializacji i serializacji niestandardowej.
class StudentAdapter extends TypeAdapter<Student> {
@Override
public Student read(JsonReader reader) throws IOException {
...
}
@Override
public void write(JsonWriter writer, Student student) throws IOException {
}
}
Zarejestruj adapter niestandardowy
Zarejestruj niestandardowy adapter przy użyciu GsonBuilder i utwórz wystąpienie Gson przy użyciu GsonBuilder.
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Student.class, new StudentAdapter());
Gson gson = builder.create();
Użyj adaptera
Gson będzie teraz używał niestandardowego adaptera do konwersji tekstu Json na obiekt i odwrotnie.
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);
Przykład
Zobaczmy przykład niestandardowego adaptera w akcji. Utwórz plik klasy Java o nazwieGsonTester w 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+ "]";
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
Student[ name = Mahesh, roll no: 1]
{
"name": "Mahesh",
"rollNo": 1
}
Gson domyślnie generuje zoptymalizowaną zawartość Json ignorując wartości NULL. Ale GsonBuilder udostępnia flagi, aby pokazać wartości NULL w danych wyjściowych Json przy użyciuGsonBuilder.serializeNulls() metoda.
GsonBuilder builder = new GsonBuilder();
builder.serializeNulls();
Gson gson = builder.create();
Przykład bez wywołania serializeNulls
Utwórz plik klasy Java o nazwie GsonTester w C: \> GSON_WORKSPACE.
Plik - 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+ "]";
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester, aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
{"rollNo": 1}
Student[ name = null, roll no: 1]
Przykład z wywołaniem serializeNulls
Utwórz plik klasy Java o nazwie GsonTester w C: \> GSON_WORKSPACE.
Plik - 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+ "]";
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
{
"rollNo": 1,
"name": null
}
Student[ name = null, roll no: 1]
Gson zapewnia @Sinceadnotacja do kontrolowania serializacji / deserializacji Json klasy na podstawie jej różnych wersji. Rozważmy następującą klasę z obsługą wersji. W tej klasie początkowo zdefiniowaliśmy dwie zmiennerollNo i name a później dodaliśmy verifiedjako nową zmienną. Używając @Since, zdefiniowaliśmyrollNo i name od wersji 1.0 i zweryfikowano, że jest to wersja 1.1.
class Student {
@Since(1.0)
private int rollNo;
@Since(1.0)
private String name;
@Since(1.1)
private boolean verified;
}
GsonBuilder zapewnia setVersion() do serializacji takiej wersjonowanej klasy.
GsonBuilder builder = new GsonBuilder();
builder.setVersion(1.0);
Gson gson = builder.create();
Przykład
Zobaczmy przykład obsługi wersjonowania w akcji. Utwórz plik klasy Java o nazwieGsonTester w C: \> GSON_WORKSPACE.
Plik - 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;
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester, aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe.
{"rollNo":1,"name":"Mahesh Kumar"}
{"rollNo":1,"name":"Mahesh Kumar","verified":true}
Domyślnie GSON wyklucza pola przejściowe i statyczne z procesu serializacji / deserializacji. Spójrzmy na następujący przykład.
Przykład
Utwórz plik klasy Java o nazwie GsonTester w 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;
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe
{"rollNo":1,"name":"Mahesh Kumar","verified":true}
Korzystanie z excludeFieldsWithModifiers
GsonBuilder zapewnia kontrolę nad wykluczaniem pól z określonym modyfikatorem przy użyciu metody excludeFieldsWithModifiers () z procesu serializacji / deserializacji. Zobacz poniższy przykład.
Przykład
Utwórz plik klasy Java o nazwie GsonTester w 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;
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe
{"rollNo":1,"name":"Mahesh Kumar","verified":true,"className":"VI"}
Korzystanie z adnotacji @Expose
Gson zapewnia @Exposeadnotacja do kontrolowania serializacji / deserializacji Json klasy na podstawie jej zakresu. Rozważmy następującą klasę ze zmienną posiadającą@Exposewsparcie. W tej klasie,name i rollnozmienne mają być udostępniane do serializacji. Następnie użyliśmyGsonBuilder.excludeFieldsWithoutExposeAnnotation()metoda wskazująca, że tylko udostępnione zmienne mają być serializowane / deserializowane. Zobacz poniższy przykład.
Przykład
Utwórz plik klasy Java o nazwie GsonTester w 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;
}
}
Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\GSON_WORKSPACE>javac GsonTester.java
Teraz uruchom GsonTester aby zobaczyć wynik -
C:\GSON_WORKSPACE>java GsonTester
Sprawdź dane wyjściowe
{"rollNo":1,"name":"Mahesh Kumar"}