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