In this short article, you'll learn how to read JSON data from a file by using the Gson library. Gson is a popular JSON processing library developed and maintained by Google for reading, writing, and parsing JSON data in Java.

Dependencies

To add Gson to your Gradle project, add the following dependency to build.gradle file:

implementation 'com.google.code.gson:gson:2.8.6'

For Maven, include the below dependency to your pom.xml file:

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.8.6</version>
</dependency>

Read JSON File to a Java Map

Suppose you have the following JSON file called user.json:

{
  "name": "John Doe",
  "email": "john.doe@example.com",
  "roles": [
    "Member",
    "Admin"
  ],
  "admin": true
}

To read the above JSON file contents to a Java Map, you can use the fromJson() method from Gson as shown below:

try {
    // create Gson instance
    Gson gson = new Gson();

    // create a reader
    Reader reader = Files.newBufferedReader(Paths.get("user.json"));

    // convert JSON file to map
    Map<?, ?> map = gson.fromJson(reader, Map.class);

    // print map entries
    for (Map.Entry<?, ?> entry : map.entrySet()) {
        System.out.println(entry.getKey() + "=" + entry.getValue());
    }

    // close reader
    reader.close();

} catch (Exception ex) {
    ex.printStackTrace();
}

You should see the following output printed on the console:

name=John Doe
email=john.doe@example.com
roles=[Member, Admin]
admin=true

Read JSON File to a Java Object

Let us first create a simple Java class called User.java to map the JSON object:

public class User {

    public String name;
    public String email;
    private String[] roles;
    private boolean admin;

    public User() {
    }

    public User(String name, String email, String[] roles, boolean admin) {
        this.name = name;
        this.email = email;
        this.roles = roles;
        this.admin = admin;
    }

    // getters and setters, toString() .... (omitted for brevity)
}

The following example shows how you can read the above JSON file into a User object by using the fromJson() method:

try {
    // create Gson instance
    Gson gson = new Gson();

    // create a reader
    Reader reader = Files.newBufferedReader(Paths.get("user.json"));

    // convert JSON string to User object
    User user = gson.fromJson(reader,User.class);

    // print user object
    System.out.println(user);

    // close reader
    reader.close();

} catch (Exception ex) {
    ex.printStackTrace();
}

You should see the following output printed on the console:

User{name='John Doe', email='john.doe@example.com', roles=[Member, Admin], admin=true}

Read JSON File to a List of Java Objects

Let us say we have the following JSON file called users.json that contains a JSON array:

[
  {
    "name": "John Doe",
    "email": "john.doe@example.com",
    "roles": [
      "Member",
      "Admin"
    ],
    "admin": true
  },
  {
    "name": "Tom Lee",
    "email": "tom.lee@example.com",
    "roles": [
      "Member"
    ],
    "admin": false
  }
]

You can now read a list of User objects from the above JSON file by using the same fromJson() method, as shown below:

try {
    // create Gson instance
    Gson gson = new Gson();

    // create a reader
    Reader reader = Files.newBufferedReader(Paths.get("users.json"));

    // convert JSON array to list of users
    List<User> users = new Gson().fromJson(reader, new TypeToken<List<User>>() {}.getType());

    // print users
    users.forEach(System.out::println);

    // close reader
    reader.close();

} catch (Exception ex) {
    ex.printStackTrace();
}

Here is the output of the above code:

User{name='John Doe', email='john.doe@example.com', roles=[Member, Admin], admin=true}
User{name='Tom Lee', email='tom.lee@example.com', roles=[Member], admin=false}

For more Gson examples, check out the How to read and write JSON using Gson in Java tutorial.

✌️ Like this article? Follow @attacomsian on Twitter. You can also follow me on LinkedIn and DEV. Buy me a coffee (cost $3)

Need help to start a new Spring Boot or MEAN stack project? I am available for contract work. Hire me to accomplish your business goals with engineering and design. Let’s talk about your project: hi@attacomsian.com.