Menggunakan GSON untuk parsing JSON di Java

GSON adalah library racikan Google untuk melakukan serialisasi dan deserialisasi data JSON dengan mudah.

Serialisasi adalah proses mengubah objek Java menjadi JSON. Sedangkan deserialisasi adalah proses mengubah JSON menjadi obejek Java.

Serialisasi dan deserialisasi biasanya dilakukan saat kita bekerja dengan webservice.

Pada kesempatan ini, kita akan belajar menggunakan library GSON untuk serialisasi dan deserialisasi data JSON secara langsung dari kode dan deserialisasi dari webservice.

Mari kita mulai…

Membuat Project dengan Maven

Pada tutorial ini, kita akan menggunakan Maven untuk membuat project dan menginstal library GSON.

Silahkan ketik perintah berikut ini untuk membuat project dengan Maven.

mvn archetype:generate \
-DgroupId=com.petanikode.app \
-DartifactId=petanikode-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false

Setelah itu, silahkan buka project ini dengan teks editor atau IDE.

Menambahkan Library GSON ke Project

Berikutnya kita akan tambahkan Si GSON dengan cara menambahkan kode depdency ini:

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.2</version>
</dependency>

di dalam file pom.xml.

Library GSON di file pom.xml

Setelah itu, ketik perintah berikut ini untuk menginstalnya:

mvn install
Install Library GSON melalui Maven

Tunggu sampai prosesnya selsai…

Membuat Class Model

Sebelum kita bisa menggunakan GSON, kita harus membuat class model yang akan menjadi template objeknya.

Sebagai contoh, kita akan menggunakan class User. Silahkan buat class User seperti ini:

public class User {
    
    public String name, email;
    public int umur;
    
    public User(String name, String email, int umur){
        this.name = name;
        this.email = email;
        this.umur = umur;
    }
    
}

Membuat Class Main

Untuk melakukan percobaan, kita akan membuat class Main.java dengan isi sebagai berikut:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
    
    public static void main(String[] args) {
        
        User mUser = new User("Petani Kode", "[email protected]", 22);
        
        // ubah objek menjadi string JSON
        Gson gson = new Gson();
        String jsonUser = gson.toJson(mUser);
        
        System.out.println(jsonUser);
        
        
        // ubah string JSON menjadi Objek
        Gson gsonBuilder = new GsonBuilder().create();
        User myUser = gsonBuilder.fromJson(jsonUser, User.class);
        System.out.println(myUser.name);
    }
    
}

Coba eksekusi…

…maka hasilnya:

Hasil serialisasi dan deserialisasi data JSON

Penjelasan:

Sebelum dapat menggunakan class dari library GSON, kita harus mengimportnya terlebih dahulu.

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

Setelah itu, kita coba membuat objek bernama mUser.

 User mUser = new User("Petani Kode", "[email protected]", 22);

Berikutnya kita buat objek gson dan mengubah objek mUser menjadi JSON.

// ubah objek menjadi string JSON
Gson gson = new Gson();
String jsonUser = gson.toJson(mUser);

System.out.println(jsonUser);

Kita menggunakan method toJson() dengan paramter objek dari class yang akan kita ubah ke dalam bentuk JSON (serialisasi).

Sedangkan untuk proses mengubah JSON menjadi Objek, caranya seperti ini:

Gson gsonBuilder = new GsonBuilder().create();
User myUser = gsonBuilder.fromJson(jsonUser, User.class);
System.out.println(myUser.name);

Pertama kita buat dulu objek GSON dari GsonBuilder().create(). Setelah itu membuat Obejek myUser dengan method fromJson().

Method fromJson() memiliki dua parameter:

gsonBuilder.fromJson(<string JSON>, User.class);

Desrialisasi JSON dari Webservice

Untuk mengubah JSON ke objek Java dari data JSON yang ada di web service, kita membutuhkan library tambahan lagi. Yaitu: library untuk melakukan HTTP Request ke webservicenya.

Ada banyak sekali library untuk melakukan HTTP Request di Java. Kita akan coba pakai library Apache HttpClient.

Silahkan tambahkan ke dalam depedencies.

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.4</version>
</dependency>

Lakukan instalasi lagi:

mvn install

Setelah itu, kita akan buat kode untuk melakukan HTTP Request ke webservice untuk mengambil data JSON. Nanti hasil dari HTTP Request ini akan berupa string JSON.

Kita akan mengambil data JSON dari: https://api.github.com/users/petanikode

Langkah yang dilakukan berikutnya adalah membuat class untuk data JSON tersebut. Silahkan buat class baru bernama GithubUser seperti ini:

public class GithubUser {
    String name;
    String email;
    String blog;
    String location;
    String html_url;
}

Nama properti yang digunakan, pastikan sama seperti nama properti pada JSON-nya. Karena kalau tidak, properti tersebut akan bernilai null.

Untuk tipe data, kita berikan saja semuanya String. Karena properti yang ingin kita ambil berteipe string semua.

Setelah itu, modifikasi class Main.java menjadi seperti ini:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

/**
 *
 * @author petanikode
 */
public class Hello {

    public static void main(String[] args) {

        User mUser = new User("Petani Kode", "[email protected]", 22);

        // ubah objek menjadi string JSON
        Gson gson = new Gson();
        String jsonUser = gson.toJson(mUser);

        System.out.println(jsonUser);

        // ubah string JSON menjadi Objek
        Gson gsonBuilder = new GsonBuilder().create();
        User myUser = gsonBuilder.fromJson(jsonUser, User.class);
        System.out.println(myUser.name);

        // deserialisasi data JSON dari Webservice
        try {
            String jsonWeb = getJson("https://api.github.com/users/petanikode");
            GithubUser gitUser = gson.fromJson(jsonWeb, GithubUser.class);
            
            System.out.println("Hasil deserialisasi dari Webservice: ");
            System.out.println(gitUser.name);
            System.out.println(gitUser.email);
            System.out.println(gitUser.blog);
            System.out.println(gitUser.location);
            System.out.println(gitUser.html_url);
        } catch (Exception e) {
            System.out.println("Terjadi masalah: " + e.getMessage());
        }
        
        
    }

    public static String getJson(String url) throws Exception {

        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);

        // add request header
        request.addHeader("User-Agent", "Mozilla/5.0");

        HttpResponse response = client.execute(request);

        System.out.println("\nSending 'GET' request to URL : " + url);
        System.out.println("Response Code : "
                + response.getStatusLine().getStatusCode());

        BufferedReader rd = new BufferedReader(
                new InputStreamReader(response.getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }

        return result.toString();

    }

}

Pada kode di atas, kita menambahkan method getJson() untuk melakukan HTTP Request ke webservice dengan library Apache HTTP Client. Hasil kembalian dari method ini adalah String JSON.

Lalu diserialisasi oleh GSON, maka hasilnya akan seperti ini:

Hasil deserialisasi data dari Webservice

[🎁 Download Source Code Contoh Tutorial ini]

Akhir Kata…

Itulah cara menggunakan GSON untuk melakukuan serialisasi dan deserialisasi data JSON di Java. Berikutnya silahkan eksperimen sendiri.

  • Baca JSON dari File lalu deserialisasi dengan GSON.
  • Serialisasi objek menjadi JSON, lalu kirim ke Webservice.

Selalamt bereksperimen.

Referensi: