Membaca Bentuk/Struktur Respon JSON Serta Contoh Parse Dengan Android

LATAR BELAKANG

JSON (JavaScript Object Notation) dalam pengertian mudahnya adalah adalah standar format pengiriman data melalui jaringan internet. Bentuk/Struktur respon JSON yang umum sebetulnya hanya ada dua yaitu Objek dan Array.  Objek mudahnya adalah sebuah row atau record atau struct.

Mengacu pada halaman resmi JSON bentuknya adalah sebagai berikut ini :

JSON Object

JSON Object merupakan sepasang nama dan nilai yang tidak terurutkan. Object dimulai dengan { (kurung kurawal buka) dan diakhiri dengan } (kurung kurawal tutup). Setiap nama diikuti dengan : (titik dua) dan nilai setelahnya, serta setiap pasangan nama dan nilai dipisahkan oleh , (koma). Di bawah ini contoh JSON Object :

{
       "nama" : "Tata Adi Nugroho",
       "kelas" : "IPA 12B"
}

JSON Array

Kumpulan nilai yang terurutkan. Array dimulai dengan [ (kurung kotak buka) dan diakhiri dengan ] (kurung kotak tutup). Setiap nilai dipisahkan oleh , (koma). Di bawah ini contoh JSON Array :

[
         "Tata",
         "Adi",
         "Nugroho"
]

PEMBAHASAN

Jika bentuk JSON hanyalah sebuah respon sederhana yang berisi beberapa Object atau Array saja mungkin mudah untuk membacanya namun jika responnya banyak gabungan dari Object dan Array tentu cukup susah membacanya apalagi untuk pemula yang baru mengenal JSON. Misalnya seperti dibawah ini :

Contoh JSON

Di bawah ini contoh respon JSON dengan format Object di dalam Object, Array di dalam Object serta Oject di dalam Array. Format seperti ini akan sering di jumpai ketika sudah mengerjakan projek yang menggunakan API.

{
        "nama": "Tata Adi N",
        "nim": "1230909009",
        "akademik": {
                "semester": "5",
                "sks": "24",
                "matakuliah": [
                      {
                                "nama": "Pemrograman Web",
                                "kode": "123123",  
                      },
                      {
                                "nama": "Kecerdasan Buatan",
                                "kode": "213223",
                      },
                      {
                                "nama": "Data Mining",
                                "kode": "5643534",
                      },
                ],
        },
}

Pengetahuan tentang struktur data (struct) menjadi nilai tambah untuk memahami tentang struktur JSON ini. Video tentang struct ada pada playlist channel youtube teman saya di bawah ini :  

Cara melihat bentuk JSON dengan mudah adalah dengan situs web JSONViewer, melalui situs tersebut kita bisa melihat bentuk JSON dalam format yang lebih mudah dibaca contohnya adalah hasil format Respon JSON diatas melalui JSON Viewer.

Hasil JSONViewer


Hasilnya dapat dilihat lebih rapi dan mudah untuk dipaham, sekarang menjadi mudah untuk membacanya melalui sebuah program. Contoh di sini akan digunakan program Android. Namun sebelumnya buat algoritma ambil datanya terlebih dahulu di bawah ini.

JSONString <-- ambil string respon <link JSON>
JSON <-- JSONString ambil objek
Nama <-- JSON ambil nama
NIM <-- JSON ambil nim
Akademik <-- JSON ambil objek akademik
Semester <-- Akademik ambil semester
SKS <-- Akademik ambil sks
Matakuliah <-- Akademik ambil array matkul
NamaMatkul <-- Matakuliah index 0 ambil nama
KodeMatkul <-- Matakuliah index 0 ambil kode

Contoh Parse Dengan Android

   Jika sudah punya gambaran dari algoritma diatas maka lanjut untuk kedalam program androidnya namun tidak akan dibahas untuk membuat view dari program karena bisa dipelajari sendiri.

  1. Ambil string respon JSON dan jadikan sebagai objek
    String jsonString = httpHandler.makeServiceCall("http://tataadin.000webhostapp.com/json/");
    JSONObject JSON = new JSONObject(jsonString);

    Pada bagian ini program mengambil string dari respon JSON karena pada dasarnya respon ini wujudnya string. Method httpHandler.makeServiceCall ini dapat diambil di file projek yang akan dibagian akhir artikel ini, fungsinya dalam android untuk membantu komunikasi dengan internet (http).

    Jika melihat pada hasil JSON Viewer maka sebetulnya respon JSON itu adalah suatu objek oleh sebab itu string dari respon tadi dirubah menjadi sebuah Objek menggunakan bantuan kelas JSON yang sudah tersedia pada paket IDE Android.

  2. Ambil atribut nama & nim 
    tnama = JSON.getString("nama");
    tnim = JSON.getString("nim");

    Bagian ini mengambil nilai dari artibut/kolom dari  objek. Artibut itu adalah nama dan nim untuk mendapatkan nilai "Tata Adi N" dan "123160088".

  3. Ambil objek Akademik dan atributnya
    JSONObject Akademik = JSON.getJSONObject("akademik");
    tsks = Akademik.getString("sks");
    tsemester = Akademik.getString("semester");

    Kembali lihat pada hasil JSON Viewer disana dapat dilihat bahwa ada objek Akademik ada dalam objek respon JSON. Inilah contoh objek didalam objek pada JSON, atau dalam struktur data disebut struct didalam struct. Pemahamannya seperti langkah sebelumnya.

  4. Ambil array matakuliah dan atributnya
    JSONArray matakuliah = Akademik.getJSONArray("matakuliah");
    for(int i = 0; i < matakuliah.length(); i++){
        JSONObject index = matakuliah.getJSONObject(i);
        Matkul matkul = new Matkul();
        matkul.setNama(index.getString("nama"));
        matkul.setKode(index.getString("kode"));
        matkulList.add(matkul);
    }

    Pada hasil JSON Viewer kita lihat objek akademik memiliki sebuah array matakuliah, untuk mengambilnya digunakan bantuan method dari kelas JSON. Kembali pada hasil JSON Viewer dapat dilihat bahwa index array berbentuk sebuah objek oleh sebab itu untuk mengambil artibutnya kita perlu mengambil index sebagai objek terlebih dahulu.

    Bagian perulangan mengambil index array ini menggunakan konsep RecyclerView karena pada android List/Array memang ditampilkan menggunakan konsep ini. Namun bagian ini akan dibahas pada artikel lain.


Langkah mengambil JSON menggunakan program android sudah selesai, selanjutnya kita perlu membuat kode tadi bekerja. Pada android hal yang berhubungan dengan internet seperti ini perlu dijalankan menggunakan mode AsyncTask agar berjalan dilatar belakang. Maka kode tadi perlu kita masukan kedalam kelas AsyncTask, sehingga hasil lengkapnya untuk aktivitas mengambil JSON adalah dibawah ini.

public class ReadJSON extends AsyncTask<Void, Void, Void>{
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //Statement sebelum mengambil json;	
    }

    @Override
    protected Void doInBackground(Void... voids) {
        HTTPHandler httpHandler = new HTTPHandler();
        String jsonString = httpHandler.makeServiceCall(url);
        if(jsonString != null){
            try{
	        JSONObject JSON = new JSONObject(jsonString);
                tnama = JSON.getString("nama");
                tnim = JSON.getString("nim");
                JSONObject Akademik = JSON.getJSONObject("akademik");
                tsks = Akademik.getString("sks");
                tsemester = Akademik.getString("semester");
                JSONArray matakuliah = Akademik.getJSONArray("matakuliah");
                for(int i = 0; i < matakuliah.length(); i++){
                    JSONObject index = matakuliah.getJSONObject(i);
                    Matkul matkul = new Matkul();
                    matkul.setNama(index.getString("nama"));
                    matkul.setKode(index.getString("kode"));
                    matkulList.add(matkul);
                }
            }catch (JSONException jsne){
                jsne.printStackTrace();
            }
        }
        return null;
    }
		
    @Override
    protected void onPostExecute(Void hasil) {
        super.onPostExecute(hasil);
	//Statement setelah json telah terambil;	
    }
}


   Projek android tersebut dapat diunduh melalui tautan github ini <android-readjson>. Jika tidak dapat di-build bisa jadi karena versi SDK tidak sama, maka cukup buat projek baru dan copy-paste folder main dari projek androidreadjson ke projek baru.

Folder Main

   Cara membaca JSON pada pemrograman lain kurang lebih algoritmanya sama mungkin dibagian kodenya saja yang berbeda karena beberapa bahasa pemrograman memiliki aturannya sendiri. Jika kurang jelas bisa ditanyakan melalui akun media sosial yang ada di widget blog.

Saya seorang programmer dengan fokus developer Web dan Android.