Urai data JSON

JSON atau JavaScript Object Notation adalah salah satu format pertukaran data. Dalam pemakaian untuk android, kenapa sering kali digunakan JSON daripada format lain seperti XML misalnya, karena JSON itu ringan. Seperti kita tahu, untuk android yang kebanyakan device penggunanya adalah mobile, koneksinya cenderung lebih lambat daripada dekstop. Jadi JSON ini sangat cocok untuk digunakan diandroid.

Pada kesempatan kali ini, kita akan mencoba untuk menguraikan data yang berformat JSON ke string untuk dapat diproses didalam aplikasi. Tapi sebelum beranjak kesitu, alangkah baiknya kita mengenal format JSON ini dari sebuah contoh data yang berformat JSON.

Berikut adalah data berformat JSON yang dikutip dari http://json.org/example.html

{
    "glossary": {
        "title": "example glossary",
		"GlossDiv": {
			"title": "S",
			"GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
					"SortAs": "SGML",
					"GlossTerm": "Standard Generalized Markup Language",
					"Acronym": "SGML",
					"Abbrev": "ISO 8879:1986",
					"GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
						"GlossSeeAlso": ["GML", "XML"]
                    },
					"GlossSee": "markup"
                }
            }
        }
    }
}

Awal dan akhir dari data diatas, dibuka dan ditutup dengan { }.  Nah didalamnya itu terdapat Object, object pertama adalah “glossary” : { .. }. “glossary” bisa dibilang nama, bisa dibilang key, terserah anda mengartikannya bagaimana. Lalu { .. } itu adalah nilai atau value dari “glossary”. Nilai dari “glossary” untuk contoh kode diatas adalah berupa object. Jadi JSON dapat mempunyai object didalam object.

Didalam android, untuk mengambil value dari “glossary” yang bertipe object tadi, dapat dilakukan dengan:

JSONObject jsonObject = new JSONObject(response);//response adalah JSONObject/String yang didapat dari server
JSONObject jsonGlossary = jsonObject.getJSONObject("glossary");

Dari syntax kode diatas, telah didapatkan value dari “glossary”, yang bisa diproses lebih lanjut untuk diambil datanya.

Berikut ada gambaran dari http://www.json.org/json-id.html tentang JSON object.

object

Dari gambar diatas, key harus bertipe string dan value sendiri mempunyai banyak tipe, seperti:

value

Lanjut ke datanya lagi. Setelah mendapatkan object “glossary” tadi, kita akan memproses lagi didalamnya. Terdapat lagi object didalamnya yaitu “title”: “example glossary”. Untuk object yang ini, valuenya bertipe string, karena diapit oleh “”.  Langkah untuk mengambilnya adalah sebagai berikut:

JSONObject jsonGlossary = jsonObject.getJSONObject("glossary");
String titleGrassary = jsonGlossary.getString("title");

Kode tersebut adalah lanjutannya kode yang diatas. String title digunakan untuk menampung value dari “title”. Karena value dari “title” bertipe string, maka kita gunakan .getString untuk mengambilnya.

Selanjutnya adalah “GlossDiv”, key ini masih satu object dengan “title”, karena dipisahkan dengan tanda , diantara mereka. Jadi kita masih menggunakan jsonGrossary sebagai objectnya.

JSONObject jsonGlossDiv = jsonGlossary.getJSONObject("GlossDiv");

“GlossDiv” mempunyai value yang bertipe object, jadi kita gunakan .getJSONObject dan menyimpannya sebagai JSONObject.

Selanjutnya adalah “title”: “S”, object dengan value string, child dari JSONObject “GlossDiv”.

JSONObject jsonGlossDiv = jsonGlossary.getJSONObject("GlossDiv");
String titleGlossDiv = jsonGlossDiv.getString("title");

Lalu terdapat object yang mempunyai value object lagi, object “GlossEntry”.

JSONObject jsonGlossEntry = jsonGlossDiv.getJSONObject("GlossEntry");

Setelah itu, didalamnya terdapat banyak sekali object.

"ID": "SGML",
					"SortAs": "SGML",
					"GlossTerm": "Standard Generalized Markup Language",
					"Acronym": "SGML",
					"Abbrev": "ISO 8879:1986",
					"GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
						"GlossSeeAlso": ["GML", "XML"]
                    },
					"GlossSee": "markup"

“ID”, “SortAs”, “GlossTerm”, “Acronym”, “Abbrev”, “GlossSee” bertipe string dan merupakan child dari object “GlossEntry”.

JSONObject jsonGlossEntry = jsonGlossDiv.getJSONObject("GlossEntry");
String id = jsonGlossEntry.getString("ID");
String sortAs = jsonGlossEntry.getString("SortAs");
String glossTerm = jsonGlossEntry.getString("GlossTerm");
String acronym = jsonGlossEntry.getString("Acronym");
String abbrev = jsonGlossEntry.getString("Abbrev");

Didalam object “GlossEntry” masih terdapat satu buah object lagi yang mempunyai value object.

JSONObject jsonGlossDef = jsonGlossEntry.getJSONObject("GlossDef");

Ada yang beda didalam object “GlossDef” ini, terdapat array didalamnya. Seperti apakah array dalam data berformat JSON, berikut ada gambarannya:

array

Jadi array isinya adalah kumpulan dari value, value sendiri dapat berupa object, string, digit dan lainnya seperti yang dijelaskan diatas. Lalu bagaiman kita mengambil json array ini, berikut caranya:

JSONArray arrayGlossSeeAlso = jsonGlossDef.getJSONArray("GlossSeeAlso");
String[] glossSeeAlso = new String[arrayGlossSeeAlso.length()];
for(int i = 0; i<arrayGlossSeeAlso.length();i++){
    glossSeeAlso[i] = arrayGlossSeeAlso.getString(i);
}

Kode diatas, kita menyiapkan sebuah array string untuk menampung array dari “GlossSeeAlso”. Terdapat perulangan disana, fungsinya untuk mendapatkan value dari array “GlossSeeAlso” yang value dari array tersebut adalah string semuanya.

Yang terakhir masih ada satu buah object yang mempunyai value string.

String glossSee = jsonGlossDef.getString("GlossSee");

Biar lebih jelas, ini kode keseluruhan untuk mendapatkan value dari data berformat JSON diatas:

JSONObject jsonObject = new JSONObject(response);

JSONObject jsonGlossary = jsonObject.getJSONObject("glossary");
String titleGrassary = jsonGlossary.getString("title");

JSONObject jsonGlossDiv = jsonGlossary.getJSONObject("GlossDiv");
String titleGlossDiv = jsonGlossDiv.getString("title");

JSONObject jsonGlossEntry = jsonGlossDiv.getJSONObject("GlossEntry");
String id = jsonGlossEntry.getString("ID");
String sortAs = jsonGlossEntry.getString("SortAs");
String glossTerm = jsonGlossEntry.getString("GlossTerm");
String acronym = jsonGlossEntry.getString("Acronym");
String abbrev = jsonGlossEntry.getString("Abbrev");

JSONObject jsonGlossDef = jsonGlossEntry.getJSONObject("GlossDef");
JSONArray arrayGlossSeeAlso = jsonGlossDef.getJSONArray("GlossSeeAlso");
String[] glossSeeAlso = new String[arrayGlossSeeAlso.length()];
for(int i = 0; i<arrayGlossSeeAlso.length();i++){
	glossSeeAlso[i] = arrayGlossSeeAlso.getString(i);
}
String glossSee = jsonGlossDef.getString("GlossSee");