Gson How to parse JSON

摘要: Gson provide simple toJson() and fromJson() methods to convert Java objects to / from JSON.

Gson provide simple toJson() and fromJson() methods to convert Java objects to / from JSON.

toJson() – Java object to JSON

	Gson gson = new Gson();
	// 1. Java object to JSON file
	gson.toJson(obj, new FileWriter("C:\\fileName.json"));
	// 2. Java object to JSON string
	String json = gson.toJson(obj);

fromJson() – JSON to Java object

	Gson gson = new Gson();
	// 1. JSON file to Java object
	Object object = gson.fromJson(new FileReader("C:\\fileName.json"), Object.class);
	// 2. JSON string to Java object
	String json = "{'name' : 'mkyong'}";
	Object object = gson.fromJson(json, Staff.class);	

1. Download Gson

pom.xml
	<dependency>
		<groupId>com.google.code.gson</groupId>
		<artifactId>gson</artifactId>
		<version>2.8.5</version>
	</dependency>

2. Java Object

For testing later.

Staff.java
package com.mkyong;
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
    //getters and setters

3. Java Objects to JSON

3.1 In Gson, we can use gson.toJson() to convert Java objects to JSON.

GsonExample1.java
package com.mkyong;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class GsonExample1 {
    public static void main(String[] args) {
        // pretty print
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        Staff staff = createStaffObject();
        // Java objects to String
        String json = gson.toJson(staff);
        //System.out.println(json);
        // Java objects to File
        try (FileWriter writer = new FileWriter("c:\\test\\staff.json")) {
            gson.toJson(staff, writer);
        } catch (IOException e) {
            e.printStackTrace();
    private static Staff createStaffObject() {
        Staff staff = new Staff();
        staff.setName("mkyong");
        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;

Output

c:\\test\\staff.json
  "name": "mkyong",
  "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.mkyong;
import com.google.gson.Gson;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class GsonExample2 {
    public static void main(String[] args) {
        Gson gson = new Gson();
        try (Reader reader = new FileReader("c:\\test\\staff.json")) {
            // Convert JSON File to Java Object
            Staff staff = gson.fromJson(reader, Staff.class);
			// print staff 
            System.out.println(staff);
        } catch (IOException e) {
            e.printStackTrace();

Output

Staff{name='mkyong', age=35, position=[Founder, CTO, Writer], skills=[java, python, node, kotlin], salary={2018=14000, 2012=12000, 2010=10000}}

5. Pretty Print JSON

5.1 The default JSON output is compact mode.

GsonExample3.java
package com.mkyong;
import com.google.gson.Gson;
public class GsonExample3 {
    public static void main(String[] args) {
        // compact print
        Gson gson = new Gson();
        String[] lang = {"Java", "Node", "Kotlin", "JavaScript"};
        String json = gson.toJson(lang);
        System.out.println(json);

Output

["Java","Node","Kotlin","JavaScript"]

5.2 To enable pretty print.

GsonExample4.java
package com.mkyong;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonExample4 {
    public static void main(String[] args) {
        // pretty print
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String[] lang = {"Java", "Node", "Kotlin", "JavaScript"};
        String json = gson.toJson(lang);
        System.out.println(json);

Output

  "Java",
  "Node",
  "Kotlin",
  "JavaScript"

6. Exclude Fields

In Gson, there are many ways to exclude certain fields.

6.1 By default, transient and static fields will be excluded. We can override the default by excludeFieldsWithModifiers

If we want to exclude static fields only.

import java.lang.reflect.Modifier;
	Gson gson = new GsonBuilder()
			.excludeFieldsWithModifiers(Modifier.STATIC)
			.create();

If we want to exclude transient and static fields, default.

import java.lang.reflect.Modifier;
	Gson gson = new GsonBuilder()
			.excludeFieldsWithModifiers(Modifier.STATIC, Modifier.TRANSIENT)
			.create();

In this configuration, static and transient fields will be included.

	Gson gson = new GsonBuilder()
			.excludeFieldsWithModifiers()
			.create();

6.2 Exclude fields by @Expose

The @Expose define which fields to be excluded from serialization and deserialization to JSON. To use @Expose, we need to create Gson object like this:

	Gson gson = new GsonBuilder()
			.excludeFieldsWithoutExposeAnnotation()
			.create();

If .excludeFieldsWithoutExposeAnnotation() mode is enabled, all fields without @Expose will be excluded. For example,

import com.google.gson.annotations.Expose;
public class Staff {
    @Expose(serialize = true, deserialize = true)
    private String name;
    @Expose
    private int age;
    @Expose(serialize = false, deserialize = true)
    private String[] position;              
    private List<String> skills;            
    private Map<String, BigDecimal> salary;

If convert above Java object to JSON, the output will be like this

  "name": "mkyong",
  "age": 35

6.3 Exclude fields by ExclusionStrategies, annotation, type, field name and etc. Gson is flexible.

A custom annotation @ExcludeField

ExcludeField.java
package com.mkyong;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface ExcludeField {

A ExclusionStrategy to define what fields should be excluded or skipped.

CustomExclusionStrategy.java
package com.mkyong;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
public class CustomExclusionStrategy implements ExclusionStrategy {
    private final Class<?> typeToSkip;
    public CustomExclusionStrategy(Class<?> typeToSkip) {
        this.typeToSkip = typeToSkip;
    @Override
    public boolean shouldSkipField(FieldAttributes f) {
        // if field name 'salary`, skip
        if ("salary".equals(f.getName())) {
            return true;
        // if found @ExcludeField, skip
        if (f.getAnnotation(ExcludeField.class) != null) {
            return true;
        return false;
    @Override
    public boolean shouldSkipClass(Class<?> clazz) {
        return (clazz == typeToSkip);

Review the staff object again.

Staff.java
public class Staff {
    private String name;
    private int age;
    @ExcludeField
    private String[] position;
    private List<String> skills;
    private Map<String, BigDecimal> salary;

Enable the ExclusionStrategy mode.

	Gson gson = new GsonBuilder()
		.setExclusionStrategies(new CustomExclusionStrategy(List.class)) // exclude all List fields.
		.create();

Output, this example, field name salary, @ExcludeField fields and List type fields will be excluded.

{"name":"mkyong","age":35}

7. Null Object Support

null object fields are ignored.

GsonExample5.java
package com.mkyong;
import com.google.gson.Gson;
public class GsonExample5 {
    public static void main(String[] args) {
        Gson gson = new Gson();
        Staff staff = createStaffObject();
        String json = gson.toJson(staff);
        System.out.println(json);
    private static Staff createStaffObject() {
        Staff staff = new Staff();
        staff.setName("mkyong");
        staff.setAge(35);
        return staff;

Output

{"name":"mkyong","age":35}

To display the null value.

	Gson gson = new GsonBuilder().serializeNulls().create();

Output

{"name":"mkyong","age":35,"position":null,"skills":null,"salary":null}

8. JSON Field Naming Support

Default

public class Staff {
    private String name;

Output

{"name":"abc"}

Custom field name with @SerializedName

public class Staff {
    @SerializedName("mkyong_name")
    private String name;

Output

{"mkyong_name":"abc"}

9. Versioning Support

import com.google.gson.annotations.Since;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class Staff {
    @Since(1.0)
    private String name;
    @Since(2.0)
    private int age;
    @Since(3.0)
    private String[] position;
    private List<String> skills;
    private Map<String, BigDecimal> salary;

In this example, the field position (version 3) will be excluded.

Gson gson = new GsonBuilder()
                .serializeNulls()
                .setVersion(2.0) // version <= 2.0 will be included.
                .create();

Output

{"name":null,"age":0,"skills":null,"salary":null}

10. FAQs

Some commonly ask questions.

10.1 Convert a JSON Array to a List of object, using TypeToken

GsonExample4.java
package com.mkyong;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.List;
public class GsonExample4 {
    public static void main(String[] args) {
        Gson gson = new Gson();
        String json = "[{\"name\":\"mkyong\"}, {\"name\":\"laplap\"}]";
        List<Staff> list = gson.fromJson(json, new TypeToken<List<Staff>>() {}.getType());
        list.forEach(x -> System.out.println(x));

Output

Staff{name='mkyong', age=0, position=null, skills=null, salary=null}
Staff{name='laplap', age=0, position=null, skills=null, salary=null}

10.2 Convert a JSON to a Map

GsonExample5.java
package com.mkyong;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.Map;
public class GsonExample5 {
    public static void main(String[] args) {
        Gson gson = new Gson();
        String json = "{\"name\":\"mkyong\", \"age\":33}";
        Map<String, Object> map = gson.fromJson(json, new TypeToken<Map<String, Object>>() {}.getType());
        map.forEach((x, y) -> System.out.println("key : " + x + " , value : " + y));

Output

key : name , value : mkyong
key : age , value : 33.0
Note
Read more Gson user guide

上一篇: Jackson Convert JSON array string to List
下一篇: Java Convert ArrayList<String> to String[]
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号