This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article's tone or style may not reflect the encyclopedic tone used on Wikipedia. See Wikipedia's guide to writing better articles for suggestions. (November 2023) (Learn how and when to remove this message) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: "Gson" – news · newspapers · books · scholar · JSTOR (November 2023) (Learn how and when to remove this message) (Learn how and when to remove this message)
Google Gson
Initial releaseMay 22, 2008; 15 years ago (2008-05-22)
Stable release
2.10.1[1] Edit this on Wikidata / 6 January 2023; 16 months ago (6 January 2023)
Written inJava
Operating systemCross-platform
LicenseApache License 2.0

Gson, or Google Gson, is an open-source Java library that serializes Java objects to JSON (and deserializes them back to Java).


The Gson library was originally developed for internal purposes at Google, with Version 1.0 released on May 22, 2008, under the terms of the Apache License 2.0. The latest version, 2.10.1, was released on January 6, 2023.


Gson utilizes reflection, meaning that classes do not have to be modified to be serialized or deserialized. By default, a class only needs a defined default (no-args) constructor; however, this requirement can be circumvented (see Features).

The following example demonstrates the basic usage of Gson when serializing a sample object:

package example;

public class Car {
    public String manufacturer;
    public String model;
    public double capacity;
    public boolean accident;

    public Car() {

    public Car(String manufacturer, String model, double capacity, boolean accident) {
        this.manufacturer = manufacturer;
        this.model = model;
        this.capacity = capacity;
        this.accident = accident;

    public String toString() {
        return ("Manufacturer: " + manufacturer + ", " + "Model: " + model + ", " + "Capacity: " + capacity + ", " + "Accident: " + accident);
package example;

public class Person {
    public String name;
    public String surname;
    public Car[] cars;
    public int phone;
    public transient int age;

    public Person() {

    public Person(String name, String surname, int phone, int age, Car[] cars) { = name;
        this.surname = surname; = cars; = phone;
        this.age = age;

    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Name: ").append(name).append(" ").append(surname).append("\n");
        sb.append("Phone: ").append(phone).append("\n");
        sb.append("Age: ").append(age).append("\n");
        int i = 0;
        for (Car car : cars) {
            sb.append("Car ").append(i).append(": ").append(car).append("\n");
        return sb.toString();
package main;

import example.Car;
import example.Person;

public class Main {
    public static void main(String[] args) {
        // Enable pretty printing for demonstration purposes
        // Can also directly create instance with `new Gson()`; this will produce compact JSON
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        Car audi = new Car("Audi", "A4", 1.8, false);
        Car skoda = new Car("Škoda", "Octavia", 2.0, true);
        Car[] cars = {audi, skoda};
        Person johnDoe = new Person("John", "Doe", 2025550191, 35, cars);

Calling the code of the above Main class will result in the following JSON output:

  "name": "John",
  "surname": "Doe",
  "cars": [
      "manufacturer": "Audi",
      "model": "A4",
      "capacity": 1.8,
      "accident": false
      "manufacturer": "Škoda",
      "model": "Octavia",
      "capacity": 2.0,
      "accident": true
  "phone": 2025550191

Diagram featuring data from JSON.

Since the Person's field age is marked as transient, it is not included in the output.

package main;

import example.Person;

public class Main {
    public static void main(String[] args) {
        Gson gson = new Gson();
        String json = "{\"name\":\"John\",\"surname\":\"Doe\",\"cars\":[{\"manufacturer\":\"Audi\",\"model\":\"A4\"," +
                "\"capacity\":1.8,\"accident\":false},{\"manufacturer\":\"Škoda\",\"model\":\"Octavia\",\"capacity\"" +
        Person johnDoe = gson.fromJson(json, Person.class);

To deserialize the output produced by the last example, you can execute the code above, which generates the following output:

Name: John Doe
Phone: 2025550191
Age: 0
Car 1: Manufacturer: Audi, Model: A4, Capacity: 1.8, Accident: false
Car 2: Manufacturer: Škoda, Model: Octavia, Capacity: 2.0, Accident: true

This shows how Gson can be used with the Java Platform Module System for the example above:

module GsonExample {
    // Open package declared in the example above to allow Gson to use reflection on classes
    // inside the package (and also access non-public fields)
    opens example to;

For more extensive examples, see Gson's usage guide on their GitHub repository.


  • Compact/pretty printing (whether you want compact or readable output)
  • How to handle null object fields – by default they are not present in the output
  • Excluding fields - rules of what fields are intended to be excluded from deserialization
  • How to convert Java field names


  1. ^ "Release 2.10.1". 6 January 2023. Retrieved 12 January 2023.



Further reading

  1. More info on package (from
  2. More info on Gson class (from
  1. ^ Jenkov, Jakob. "GSON - Gson". Retrieved 2023-12-28.
  2. ^ Gson, Google, 2023-12-28, retrieved 2023-12-28