Convert Java objects to from JSON using Gson

This article shows how to convert Java objects to from JSON using Gson.

Table of contents:

P.S Tested with Gson 2.10.1

1. Download Google Gson

Declare gson in the pom.xml.

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.

Staff.java

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.

GsonConvertObjectToJson.java

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.

GsonConvertJsonToObject.java

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.

GsonConvertJsonToObject2.java

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.

GsonConvertJsonToObject3.java

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.

Person.java

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.

GsonConvertJsonToObject4.java

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

9. References

About Author

author image
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments