Convert Java objects to from JSON using Gson
This article shows how to convert Java objects to from JSON using Gson.
Table of contents:
- 1. Download Google Gson
- 2. Gson Basic Usages
- 3. Java Object
- 4. Convert Object to JSON using Gson
- 5. Converts JSON to Java Object using Gson
- 6. Modify JSON with JsonElement
- 7. Converts Json Array to List objects
- 8. Download Source Code
- 9. References
P.S Tested with Gson 2.10.1
1. Download Google Gson
Declare gson
in the pom.xml
.
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
2. Gson Basic Usages
Converts Java objects to JSON using gson.toJson()
.
Gson gson = new Gson();
// A Java object
Staff obj = new Staff();
// Converts Java object to JSON string
String json = gson.toJson(obj);
// Converts Java object to File
try (Writer writer = new FileWriter("staff.json")) {
gson.toJson(staff, writer);
} catch (IOException e) {
throw new RuntimeException(e);
}
Converts JSON to Java objects using gson.fromJson()
.
Gson gson = new Gson();
// Converts JSON file to Java object
try (Reader reader = new FileReader("staff.json")) {
// Convert JSON File to Java Object
Staff staff = gson.fromJson(reader, Staff.class);
} catch (IOException e) {
throw new RuntimeException(e);
}
// Converts JSON string to Java object
String json = "{'name' : 'mkyong'}";
Staff staff = gson.fromJson(json, Staff.class);
// Converts JSON string to JsonElement
String json = "{'name' : 'mkyong'}";
JsonElement element = gson.fromJson(json, JsonElement.class);
// Converts JsonElement to String
String result = gson.toJson(json);
// Converts JsonElement to Object
Staff staff = gson.fromJson(element, Staff.class);
3. Java Object
A Java object, later uses this for conversion.
package com.mkyong.json.model;
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
private boolean active; // boolean
//getters, setters, constructors, toString and etc
}
4. Convert Object to JSON using Gson
In Gson, we can use gson.toJson()
to convert a Java object to JSON.
package com.mkyong.json.gson;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mkyong.json.model.Staff;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class GsonConvertObjectToJson {
public static void main(String[] args) {
// default
//Gson gson = new Gson();
// enable pretty print
Gson gson = new GsonBuilder().setPrettyPrinting().create();
// create a staff object for testing
Staff staff = createStaffObject();
// Converts Java object to String
String json = gson.toJson(staff);
System.out.println(json);
// Converts Java object to File
try (Writer writer = new FileWriter("staff.json")) {
gson.toJson(staff, writer);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static Staff createStaffObject() {
Staff staff = new Staff();
staff.setName("mkyong");
staff.setAge(42);
staff.setPosition(new String[]{"Founder", "CTO", "Writer"});
Map<String, BigDecimal> salary = new HashMap<>();
salary.put("2010", new BigDecimal(10000));
salary.put("2012", new BigDecimal(12000));
salary.put("2018", new BigDecimal(14000));
staff.setSalary(salary);
staff.setSalary(salary);
staff.setSkills(Arrays.asList("java", "python", "node", "kotlin"));
staff.setActive(true);
return staff;
}
}
Output
{
"name": "mkyong",
"age": 42,
"position": [
"Founder",
"CTO",
"Writer"
],
"skills": [
"java",
"python",
"node",
"kotlin"
],
"salary": {
"2018": 14000,
"2012": 12000,
"2010": 10000
},
"active": true
}
5. Converts JSON to Java Object using Gson
In Gson, we can use gson.fromJson()
to convert a JSON back to a Java object.
5.1 The following example uses Gson to read from a JSON file and convert back to the Staff
object.
package com.mkyong.json.gson;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mkyong.json.model.Staff;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class GsonConvertJsonToObject {
public static void main(String[] args) {
// default compact print
Gson gson = new Gson();
try (Reader reader = new FileReader("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) {
throw new RuntimeException(e);
}
}
}
Output
Staff{name='mkyong', age=42, position=[Founder, CTO, Writer],
skills=[java, python, node, kotlin], salary={2018=14000, 2012=12000, 2010=10000}, active=true}
5.2 The following example uses Gson to read from a JSON String and convert back to the Staff
object.
package com.mkyong.json.gson;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mkyong.json.model.Person;
import com.mkyong.json.model.Staff;
public class GsonConvertJsonToObject2 {
public static void main(String[] args) {
// enable pretty print
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = "{\"name\":\"mkyong\",\"age\":42,\"position\":[\"Founder\",\"CTO\",\"Writer\"],\"skills\":[\"java\",\"python\",\"node\",\"kotlin\"],\"salary\":{\"2018\":14000,\"2012\":12000,\"2010\":10000},\"active\":true}";
// Converts JSON to Java objecto
Staff staff = gson.fromJson(json, Staff.class);
System.out.println(staff);
}
}
Output
Staff{name='mkyong', age=42, position=[Founder, CTO, Writer], skills=[java, python, node, kotlin], salary={2018=14000, 2012=12000, 2010=10000}, active=true}
6. Modify JSON with JsonElement
The following example uses Gson to convert a JSON string to a JsonElement
. Later, we show how to modify the JSON data with JsonElement
and convert it back to the Staff
object.
package com.mkyong.json.gson;
import com.google.gson.*;
import com.mkyong.json.model.Staff;
public class GsonConvertJsonToObject3 {
public static void main(String[] args) {
Gson gson = new Gson();
String json = "{\"name\":\"mkyong\",\"age\":42,\"position\":[\"Founder\",\"CTO\",\"Writer\"],\"skills\":[\"java\",\"python\",\"node\",\"kotlin\"],\"salary\":{\"2018\":14000,\"2012\":12000,\"2010\":10000},\"active\":true}";
// Converts JSON to JsonElement
JsonElement element = gson.fromJson(json, JsonElement.class);
// modify JSON data
if (element.isJsonObject()) {
JsonObject obj = element.getAsJsonObject();
// remove position and salary
obj.remove("position");
obj.remove("salary");
// add or update age
obj.addProperty("age", 99);
// add a JsonArray
JsonArray jsonArray = new JsonArray();
jsonArray.add("spring boot");
jsonArray.add("javascript");
obj.add("skills", jsonArray);
}
// Converts JsonElement to Java object
Staff staff = gson.fromJson(element, Staff.class);
System.out.println(staff);
}
}
Output
Staff{name='mkyong', age=99, position=null, skills=[spring boot, javascript], salary=null, active=true}
7. Converts Json Array to List objects
7.1 Review the following JSON structure.
{
"company":"hello world",
"data": [
{"age": 10, "name": "AAA"},
{"age": 20, "name": "BBB"},
{"age": 30, "name": "CCC"}
]
}
7.2 Creates a Person
object to match the JSON data
array containing fields name
and age
.
package com.mkyong.json.model;
public class Person {
private String name;
private int age;
// getters, setters, constructors, toString() and etc...
}
7.3 The following example uses Gson to parse the above JSON string, get the data
array, and convert it to a list of Person
objects.
package com.mkyong.json.gson;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.mkyong.json.model.Person;
import java.lang.reflect.Type;
import java.util.List;
public class GsonConvertJsonToObject4 {
public static void main(String[] args) {
Gson gson = new Gson();
String json = """
{
"company":"hello world",
"data": [
{"age": 10, "name": "AAA"},
{"age": 20, "name": "BBB"},
{"age": 30, "name": "CCC"}
]
}
""";
// Converts JSON to JsonElement
JsonElement element = gson.fromJson(json, JsonElement.class);
if (element.isJsonObject()) {
JsonObject obj = element.getAsJsonObject();
// Get the `data` array
JsonArray data = obj.getAsJsonArray("data");
// creates a List<Person> type
Type personListType = new TypeToken<List<Person>>() {}.getType();
// converts the `data` array to List<Person>
List<Person> list = gson.fromJson(data, personListType);
for (Person person : list) {
System.out.println(person);
}
}
}
}
Output
Person{name='AAA', age=10}
Person{name='BBB', age=20}
Person{name='CCC', age=30}
8. Download Source Code
$ git clone https://github.com/mkyong/java-json
$ cd gson