Skip to main content

Java | Mudahnya Konversi Java Object - JSON dengan Google Gson

Pada kesempatan kali ini saya ingin berbagi dengan sahabat tentang konversi object menjadi JSON atau sebaliknya.
Sahabat tentunya sudah tidak asing lagi dengan format JSON bukan? 
Bagi yang belum kenal, silahkan kenalan lebih dalam lewat halaman wikinya ya. :)

Sebenarnya kita bisa membuat coding sendiri untuk melakukan konversi ke format JSON,
karena JSON merupakan format yang berbasis text.
Hanya saja, jika sudah ada yang membuatnya terlebih dahulu dan sudah production ready, terlebih lagi jika pembuatnya adalah Google, kenapa harus membuat library sendiri. 
Ingat prinsip don't reinvent the wheel kan.
Jadi saya memilih untuk menggunakan library Google Gson, yang informasi lebih detailnya bisa dinikmati pada halaman berikut, http://code.google.com/p/google-gson/

Ok, let's get our hand dirty !

Perlu diketahui, seperti biasa saya menggunakan Maven, sehingga untuk menambahkan library Google Gson kita tinggal mengedit file pom.xml dan menambahkan dependency berikut:

<dependency>
 <groupid>com.google.code.gson</groupid>
 <artifactid>gson</artifactid>
 <version>2.2.2</version>
</dependency>

Pertama saya, membuat sebuah class POJO dengan nama Person, sebagai object yang akan dikonversi.

public class Person {

    private String name;
    private int age;
    private List message;

    public Person() {
    }

    public Person(String name, int age, List message) {
        this.name = name;
        this.age = age;
        this.message = message;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List getMessage() {
        return message;
    }

    public void setMessage(List message) {
        this.message = message;
    }

    @Override
    public String toString() {
        StringBuilder buffer = new StringBuilder();
        buffer.append(String.format("name: %s\n", name));
        buffer.append(String.format("age: %d\n", age));
        buffer.append("message:\n");
        if (null != message) {
            for (String msg : message) {
                buffer.append(String.format("\t%s\n", msg));
            }
        }
        return buffer.toString();
    }
}

Isi classnya sederhana saja, namun saya sudah mengoverride method toString agar hasil System.out.print class Person bisa dibaca dengan mudah.

Google Gson menyediakan class Gson untuk menghandle proses konversi, melalui method toJson dan fromJson.
Berikut saya lampirkan class util yang saya buat

public class JsonUtil {

    public static String convertPersonToJson(Person person) {
        return convertPersonToJson(person, true);
    }

    public static String convertPersonToJson(Person person, boolean prettyPrint) {
        GsonBuilder builder = new GsonBuilder();
        builder.serializeNulls();
        if (prettyPrint) {
            builder.setPrettyPrinting();
        }
        Gson gson = builder.create();

        return gson.toJson(person, Person.class);
    }

    public static Person getPersonFromJson(String json) {
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();

        return gson.fromJson(json, Person.class);
    }
}

Secara default output json yang dihasilkan oleh Gson masih dalam mode compact,
namun Gson juga menyediakan opsi untuk menghasilkan output json yang lebih mudah dibaca (*disebut prettyprint).

Kemudian kita buat main class untuk mencoba perbedaan antara mode compact dan mode prettyprint.

public class AppLauncher {

    public static void main(String[] args) {
        Person person = new Person();
        person.setName("Eko Suhariyadi");
        person.setAge(26);
        person.setMessage(Arrays.asList("Uzumaki Naruto", "Uchiha Sasuke", "Hatake Kakashi", "Jackson Michael"));

        String jsonCompact = JsonUtil.convertPersonToJson(person, false);
        System.out.println("Json compact:");
        System.out.println(jsonCompact);


        String jsonPretty = JsonUtil.convertPersonToJson(person, true);
        System.out.println("\nJson prettyprint:");
        System.out.println(jsonPretty);

        Person fromJson = JsonUtil.getPersonFromJson(jsonPretty);
        System.out.println(fromJson);
    }
}

Output hasil run main class tersebut adalah sebagai berikut:


Json compact:
{"name":"Eko Suhariyadi","age":26,"message":["Uzumaki Naruto","Uchiha Sasuke","Hatake Kakashi","Jackson Michael"]}

Json prettyprint:
{
  "name": "Eko Suhariyadi",
  "age": 26,
  "message": [
    "Uzumaki Naruto",
    "Uchiha Sasuke",
    "Hatake Kakashi",
    "Jackson Michael"
  ]
}

name: Eko Suhariyadi
age: 26
message:
Uzumaki Naruto
Uchiha Sasuke
Hatake Kakashi
Jackson Michael

Bagaimana, sangat mudah kan !?
Selamat mencoba dan happy coding :).

Source code bisa diakses melalui akun github saya, https://github.com/ekosuhariyadi/belajar-java

Comments

Popular posts from this blog

Java | Menambahkan Dialog Konfirmasi Sebelum Keluar dari Aplikasi

Kali ini saya ingin berbagi cara sederhana untuk menampilkan dialog konfirmasi sebelum keluar dari aplikasi. Dengan syarat aplikasi yang kita buat harus menggunakan JFrame sebagai frame utama. Langkah-langkah yang harus kita lakukan adalah sebagai berikut: 1. Ganti property default close operation dari JFrame menjadi DO_NOTHING_ON_CLOSE, value ini dimaksudkan agar ketika button close dari JFrame diklik tidak akan terjadi apa-apa. Sebaliknya jika valuenya adalah EXIT_ON_CLOSE, maka ketika button close dari JFrame diklik maka program akan tertutup. setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 2. Yang kedua adalah kita harus menambahkan WindowListener pada JFrame. Interface WindowListener memiliki beberapa method terkait event terhadap window (yakni JFrame), namun yang harus kita override hanyalah method windowClosing, method ini akan dipanggil ketika button close diklik.   Sebagai informasi, apabila kita menambahkan WindowListener secara langsung maka semua method dari i

PostgreSQL | Membuat Nomor Urut dengan Window Function ROW_NUMBER()

Pengguna Oracle Database mungkin sudah sangat familiar dengan clausa ROWNUM. Bagi yang belum tahu apa itu ROWNUM,  ROWNUM  adalah  pseudo column  (kolom bayangan) yang berisi nomor urut dari hasil eksekusi query. Sayangnya fitur ini belum tersedia pada PostgreSQL . Namun ada kabar gembira bagi kita pengguna  PostgreSQL , dimana sejak versi 8.4, PostgreSQL telah menyediakan 1 window function  yang mengakomodasi masalah ROWNUM, yakni ROW_NUMBER() . Sesuai dengan dokumentasi yang disediakan, cara menggunakan fungsi ini adalah dengan menggabungkannya dengan clausa OVER  yang didalamnya berisi clausa ORDER BY . Supaya lebih jelas dan lebih mudah dipahami, lebih baik langsung kita praktekkan saja. Saya membuat sebuah table dengan struktur sebagai berikut CREATE TABLE name ( code CHAR(1) ); yang kemudian saya isi kolom code dengan alfabet mulai dari a s/d z  dan angka 0 (nol). Sebelumnya kita lakukan query ke table name tanpa clausa ORDER BY : SELECT code FROM name; Outputny

PostgreSQL | Ekspresi Kondisional CASE Pada Query

Salah satu fitur yang saya sukai dari PostgreSQL adalah dapat digunakannya ekspresi kondisional pada query. PostgreSQL menyediakan ekpresi CASE yang memiliki fungsi yang sama dengan statemen IF/ELSE pada bahasa pemrograman. Berikut adalah bentuk dari ekspresi CASE pada PostgreSQL CASE WHEN condition THEN result      [WHEN ...]      [ELSE result] END Untuk melihat bagaimana cara menggunakan ekspresi CASE, saya memiliki sebuah tabel number dengan sebuah kolom nomor yang memuat data bertipe integer. SELECT nomor FROM number ORDER BY nomor;  nomor -------      1      3     32     37     38     97 (6 rows) Sekarang mari kita gunakan ekspresi CASE untuk menentukan apakah nomor tersebut merupakan bilangan ganjil atau genap. SELECT nomor, (CASE WHEN nomor % 2 = 0 THEN 'Bilangan Genap' ELSE 'Bilangan Ganjil' END) AS status FROM number ORDER BY nomor; dan hasilnya adalah sebagai berikut:  nomor |     status     -------+-----------------      1 | Bilangan