In this tutorial, we will show you how to use Gson to convert Java object to / from JSON.
P.S All examples are tested by Gson 2.8.5
Note
JSON stands for JavaScript Object Notation, it is a lightweight data-interchange format. You can see many Java applications started to throw away XML format and start using JSON as a new data-interchange format. Java is all about object, often times, you need to convert an object into JSON format for data-interchange or vice verse.
Note
Jackson is another high performance JSON processor, try this Jackson 2 – Java object to / from JSON
1. Download Gson
pom.xml
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> </dependency>
2. Gson Basic
toJson() – Convert Java objects to JSON
Gson gson = new Gson();
Staff obj = new Staff();
// 1. Java object to JSON file
gson.toJson(obj, new FileWriter("C:\\projects\\staff.json"));
// 2. Java object to JSON string
String jsonInString = gson.toJson(obj);
fromJson() – Convert JSON to Java objects
Gson gson = new Gson();
// 1. JSON file to Java object
Staff staff = gson.fromJson(new FileReader("C:\\projects\\staff.json"), Staff.class);
// 2. JSON string to Java object
String json = "{'name' : 'favtuts'}";
Staff staff = gson.fromJson(json, Staff.class);
// 3. JSON file to JsonElement, later String
JsonElement json = gson.fromJson(new FileReader("C:\\projects\\staff.json"), JsonElement.class);
String result = gson.toJson(json);
3. Java Objects to JSON
3.1 A Java POJO, later uses this for conversion.
Staff.java
package com.favtuts.json.gson.pojo;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class Staff {
private String name;
private int age;
private String[] position; // array
private List<String> skills; // list
private Map<String, BigDecimal> salary; // map
public Staff(String name, int age) {
this.name = name;
this.age = age;
}
public Staff() {
}
//getters and setters
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
", position='" + Arrays.asList(getPosition()) + "'" +
", skills='" + getSkills() + "'" +
", salary='" + getSalary() + "'" +
"}";
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String[] getPosition() {
return this.position;
}
public void setPosition(String[] position) {
this.position = position;
}
public List<String> getSkills() {
return this.skills;
}
public void setSkills(List<String> skills) {
this.skills = skills;
}
public Map<String,BigDecimal> getSalary() {
return this.salary;
}
public void setSalary(Map<String,BigDecimal> salary) {
this.salary = salary;
}
}
GsonExample1.java
package com.favtuts.json.gson;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import com.favtuts.json.gson.pojo.Staff;
import com.google.gson.Gson;
public class GsonJavaObjectJSON {
public static void main(String[] args) {
convertJavaObjectToJSON();
}
static void convertJavaObjectToJSON() {
Gson gson = new Gson();
Staff staff = createStaffObject();
// Java objects to String
// String json = gson.toJson(staff);
// Java objects to File
try (FileWriter writer = new FileWriter("/home/tvt/workspace/favtuts/staff.json")) {
gson.toJson(staff, writer);
} catch (IOException e) {
e.printStackTrace();
}
}
private static Staff createStaffObject() {
Staff staff = new Staff();
staff.setName("favtuts");
staff.setAge(35);
staff.setPosition(new String[]{"Founder", "CTO", "Writer"});
Map<String, BigDecimal> salary = new HashMap() {{
put("2010", new BigDecimal(10000));
put("2012", new BigDecimal(12000));
put("2018", new BigDecimal(14000));
}};
staff.setSalary(salary);
staff.setSkills(Arrays.asList("java", "python", "node", "kotlin"));
return staff;
}
}
By default, Gson write JSON in compact mode.
C:\\projects\\staff.json
{"name":"favtuts","age":35,"position":["Founder","CTO","Writer"],"skills":["java","python","node","kotlin"],"salary":{"2018":14000,"2012":12000,"2010":10000}}
To enable the pretty print mode :
import com.google.gson.Gson; import com.google.gson.GsonBuilder; Gson gson = new GsonBuilder().setPrettyPrinting().create();
Output
C:\\projects\\staff.json
{
"name": "favtuts",
"age": 35,
"position": [
"Founder",
"CTO",
"Writer"
],
"skills": [
"java",
"python",
"node",
"kotlin"
],
"salary": {
"2018": 14000,
"2012": 12000,
"2010": 10000
}
}
4. JSON to Java Objects
4.1 In Gson, we can use gson.fromJson to convert JSON back to Java objects.
GsonExample2.java
package com.favtuts.json.gson;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import com.favtuts.json.gson.pojo.Staff;
import com.google.gson.Gson;
public class GsonJavaObjectJSON {
public static void main(String[] args) {
// convertJavaObjectToJSON();
convertJsonToJavaObject();
}
static void convertJsonToJavaObject() {
Gson gson = new Gson();
try (Reader reader = new FileReader("/home/tvt/workspace/favtuts/staff.json")) {
// Convert JSON File to Java Object
Staff staff = gson.fromJson(reader, Staff.class);
// print staff object
System.out.println(staff);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output
{ name='favtuts', age='35', position='[Founder, CTO, Writer]', skills='[java, python, node, kotlin]', salary='{2018=14000, 2012=12000, 2010=10000}'}
4.2 Convert to JsonElement
GsonExample3.java
package com.favtuts.json.gson;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import com.favtuts.json.gson.pojo.Staff;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
public class GsonJavaObjectJSON {
public static void main(String[] args) {
convertJsonToJsonElement();
}
static void convertJsonToJsonElement() {
// pretty print
Gson gson = new GsonBuilder().setPrettyPrinting().create();
try (Reader reader = new FileReader("/home/tvt/workspace/favtuts/staff.json")) {
// Convert JSON to JsonElement, and later to String
JsonElement json = gson.fromJson(reader, JsonElement.class);
String jsonInString = gson.toJson(json);
System.out.println(jsonInString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output
{
"name": "favtuts",
"age": 35,
"position": [
"Founder",
"CTO",
"Writer"
],
"skills": [
"java",
"python",
"node",
"kotlin"
],
"salary": {
"2018": 14000,
"2012": 12000,
"2010": 10000
}
}
Note
More Gson examples