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

References

Leave a Reply

Your email address will not be published. Required fields are marked *