GSON is Google’s JSON parser. It is used to parse JSON files and generate JSON files. It has multiple APIs which serialize Java objects to JSON and deserializes JSON files to Java objects. To use GSON in your java application, we first need to install it. To do this, we can either add GSON jar dependency in Maven pom.xml file or we can download the jar and add it to our project as shown below:
pom.xml file is as follows:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3.1</version> </dependency>
Let’s understand how Gson serializes and deserializes using various APIs.
Consider XYZ company which maintains Employee information. So we have Employee class with attributes like id, name, department, salary and rating. We create a Gson instance as follows:
Gson gson = new Gson();
Methods:
- Creating an object with all attributes and generate a GSON out of it
- Creating a new instance of gson using GsonBuilder
Implementation:
Method 1: We create an object with all attributes and generate a GSON out of it.
Example
// Java Program to Create an Employee object with all // Attributes and generate a GSON out of it // Importing input output classes import com.google.gson.Gson;
import java.io.*;
// Main class class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an object of Gson class
Gson gson = new Gson();
// Creating an object of Employee class
Employee emp = new Employee();
// Attributes
emp.setName( "John" );
emp.setId( "E00101" );
emp.setDepartment( "IT" );
emp.setSalary( 250000.00 );
emp.setRating( 7 );
// Generating json from emp object
String empJson = gson.toJson(emp);
System.out.println( "Emp json is " + empJson);
// Changing one of the attributes of emp object
emp.setDepartment( "Java" );
// Generating emp object from emp json
Employee empGenerated = gson.fromJson(
gson.toJson(emp), Employee. class );
// Print and display the employee been generated
System.out.println(
"Generated employee from json is "
+ empGenerated);
}
} // Class 2 // Helper class class Employee {
// Member variables of this class
private String id;
private String name;
private String department;
private int rating;
private double salary;
// Member functions of this class
// Method 1
public String getId() { return id; }
// Method 2
public void setId(String id) { this .id = id; }
// Method 3
public String getName() { return name; }
// Method 4
public void setName(String name) { this .name = name; }
// Method 5
public String getDepartment() { return department; }
// Method 6
public void setDepartment(String department)
{
this .department = department;
}
// Method 7
public int getRating() { return rating; }
// Method 8
public void setRating( int rating)
{
this .rating = rating;
}
// Method 9
public double getSalary() { return salary; }
// Method 10
public void setSalary( double salary)
{
this .salary = salary;
}
// Method 11
@Override public String toString()
{
return "Employee [id=" + id + ", name=" + name
+ ", department=" + department + ", rating="
+ rating + ", salary=" + salary + "]" ;
}
} |
Output:
Emp json is {"id":"E00101","name":"John","department":"IT","rating":7,"salary":250000.0} Generated employee from json is Employee [id=E00101, name=John, department=Java, rating=7, salary=250000.0]
Method 2: We can also create a new instance of gson using GsonBuilder.
Syntax:
GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create();
Implementation:
Example 1
// Java Program where we will be using GsonBuilder object to // Pretty Print the gson Contents // Importing I/O classes import java.io.*;
// Class 1 // Main class class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an object of Employee class
Employee emp = new Employee();
// Attributes
emp.setId( "F000101" );
emp.setName( "Dave" );
emp.setRating( 9 );
emp.setDepartment( "DB" );
emp.setSalary( 150000.00 );
// Creating a GSON builder
GsonBuilder gsonBuilder = new GsonBuilder();
// Creating a GSON from GSON builder
Gson gson = gsonBuilder.create();
// Creating an employee gson using pretty printing
String empJson = gsonBuilder.setPrettyPrinting()
.create()
.toJson(emp);
// Print and display
System.out.println(
"Emp json in pretty print format:" + empJson);
// Update rating of emp object
emp.setRating( 8 );
Employee updatedEmp = gson.fromJson(
gson.toJson(emp), Employee. class );
// Print and displaying the updated employee
System.out.println( "Updated employee is : "
+ updatedEmp);
}
} // Class 2 // Helper class class Employee {
// Attributes
private String id;
private String name;
private String department;
private int rating;
private double salary;
// Member methods of this class
public String getId() { return id; }
public void setId(String id) { this .id = id; }
public String getName() { return name; }
public void setName(String name) { this .name = name; }
public String getDepartment() { return department; }
public void setDepartment(String department)
{
this .department = department;
}
public int getRating() { return rating; }
public void setRating( int rating)
{
this .rating = rating;
}
public double getSalary() { return salary; }
public void setSalary( double salary)
{
this .salary = salary;
}
@Override public String toString()
{
return "Employee [id=" + id + ", name=" + name
+ ", department=" + department + ", rating="
+ rating + ", salary=" + salary + "]" ;
}
} |
Output:- Emp json in pretty print format:{ "id": "F000101", "name": "Dave", "department": "DB", "rating": 9, "salary": 150000.0 } Updated employee is : Employee [id=F000101, name=Dave, department=DB, rating=8, salary=150000.0]
If we make any field in Employee class as transient, then Gson library will ignore it during serialization and deserialization and set it to its default value. Let’s understand this with an example.
Example 2
// Java Program to Make Rating Attribute of Employee class // as Transient // Importing required classes import java.io.*;
// Class 1 // Main class class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an object of Gson and user-defined
// Employee class
Gson gson = new Gson();
Employee emp = new Employee();
emp.setName( "Jane" );
emp.setId( "J01012" );
emp.setDepartment( "Devops" );
emp.setSalary( 200000.00 );
emp.setRating( 7 );
// Generating json from emp object
String empJson = gson.toJson(emp);
System.out.println( "Emp json is " + empJson);
// Changing one of the attributes of emp object
emp.setDepartment( "Java" );
// Generate emp object from emp json
Employee empGenerated = gson.fromJson(
gson.toJson(emp), Employee. class );
// Print and display the employee generated from
// json
System.out.println(
"Generated employee from json is "
+ empGenerated);
}
} // Class 2 // Helper class class Employee {
// Attributes
private String id;
private String name;
private String department;
private transient int rating;
private double salary;
// Member methods of this class
public String getId() { return id; }
public void setId(String id) { this .id = id; }
public String getName() { return name; }
public void setName(String name) { this .name = name; }
public String getDepartment() { return department; }
public void setDepartment(String department)
{
this .department = department;
}
public int getRating() { return rating; }
public void setRating( int rating)
{
this .rating = rating;
}
public double getSalary() { return salary; }
public void setSalary( double salary)
{
this .salary = salary;
}
@Override public String toString()
{
return "Employee [id=" + id + ", name=" + name
+ ", department=" + department + ", rating="
+ rating + ", salary=" + salary + "]" ;
}
} |
Output:
Emp json is {"id":"J01012","name":"Jane","department":"Devops","salary":200000.0} Generated employee from json is Employee [id=J01012, name=Jane, department=Java, rating=0, salary=200000.0]
Output explanation:
When the employee object is serialized to json, the rating attribute is not present in the json string as it is marked as transient. When the json string is deserialized to an employee object, the rating being an int field is set to its default value which is 0. Thus, Gson library ignores transient fields and sets them to their default value based on the data type of the field.