Parsing — proses analisis sintaksis data terstruktur yang mengekstrak informasi dari JSON, XML, CSV atau Protobuf untuk digunakan dalam aplikasi. Menurut Square Engineering (2025), pemilihan strategi parsing secara langsung mempengaruhi kinerja aplikasi seluler. Parsing streaming memungkinkan pemrosesan megabyte data tanpa memuat seluruh dokumen ke memori.
Utama
Parsing (analisis sintaksis) — proses mengubah urutan karakter menjadi representasi terstruktur yang cocok untuk pemrosesan program. Dalam konteks pengembangan seluler, parsing berarti analisis respons server, file konfigurasi, cache lokal, dan file sumber daya. Setiap format memerlukan pendekatan sendiri: JSON — ringan dan terintegrasi di SDK, XML — ketat dengan validasi skema XSD, CSV — minimalis untuk data tabel, Protobuf — biner dengan skema kaku.
Setiap parser, terlepas dari formatnya, melalui tiga tahap. Analisis leksikal memecah teks mentah menjadi leksem: kunci, string, angka, pemisah dan komentar. Analisis sintaksis memeriksa kebenaran tata bahasa — keseimbangan tanda kurung di JSON, kebenaran penyarangan tag di XML. Pembangunan struktur keluaran membentuk representasi objek: JSONObject, Map, atau aliran token untuk pemrosesan lebih lanjut. Menurut Apple (2026), parser Foundation bawaan di iOS menggunakan analisis malas — hanya memvalidasi awal JSON, menghemat sumber daya.
Parsing manual (JSONSerialization, XmlPullParser) memberikan kontrol penuh atas proses dan berguna untuk format tidak standar atau kebutuhan validasi kustom setiap bidang. Library otomatis (JSONDecoder, Moshi, kotlinx.serialization) mempercepat pengembangan, tetapi menyembunyikan detail penanganan kesalahan. Pemilihan tergantung pada kebutuhan: jika struktur data dinamis atau tidak diketahui sebelumnya — parsing manual lebih disukai. Jika skema tetap — deserialisasi otomatis mengurangi kode sebesar 60–70%.
Parsing — operasi yang lebih luas: dapat dilakukan secara streaming dan tidak selalu membuat objek yang ditipifikasi. Deserialisasi — kasus khusus parsing, yang hasilnya selalu merupakan instance dari kelas yang diketahui sebelumnya dengan tipe properti yang konkret. Parser JSON menguraikan dokumen menjadi Map atau JsonElement, sementara deserialisator mengubah JSON yang sama menjadi objek konkret User, Order atau Product dengan bidang dan tipe yang diketahui.
| Karakteristik | Parsing | Deserialisasi |
|---|---|---|
| Hasil | JsonElement, Map, aliran token | Objek tertipifikasi (User, Order) |
| Mode streaming | Ya (SAX, JsonReader) | Tidak (seluruh objek di memori) |
| Tipifikasi | Opsional, tipe dinamis | Wajib, tipe statis |
| Contoh | XmlPullParser.next(), SAX events | json.decodeFromString<User>() |
Parsing streaming — keunggulan utama parsing dibandingkan deserialisasi. XmlPullParser di Android mengurai XML saat membaca, tanpa memuat seluruh dokumen ke memori operatif. Ini sangat penting untuk respons API besar, parsing feed RSS dengan ratusan elemen, atau pemrosesan array ribuan objek JSON dari dump server. Parser streaming membaca token demi token, mengonsumsi jumlah memori yang konstan terlepas dari ukuran dokumen.
JSON — format pertukaran data yang dominan. Di iOS, JSONSerialization bawaan mengurai JSON menjadi Any, dan JSONDecoder — langsung ke struktur Codable. Di Android, org.json standar menyediakan JSONObject dan JSONArray untuk analisis manual. Gson dan Moshi menambahkan konversi otomatis. Pilihan antara pendekatan manual dan otomatis — keputusan arsitektur pertama dari lapisan jaringan.
val jsonString = """{"users":[{"id":1,"name":"Alice"}]}"""
val jsonObject = JSONObject(jsonString)
val usersArray = jsonObject.getJSONArray("users")
for (i in 0 until usersArray.length()) {
val item = usersArray.getJSONObject(i)
val id = item.getInt("id")
val name = item.getString("name")
// pemrosesan pengguna
}
Parsing manual melalui org.json berguna ketika struktur respons tidak diketahui sebelumnya atau sangat bervariasi. Pendekatan ini memberikan kontrol penuh atas penanganan kesalahan dan bidang nullable, tetapi membutuhkan lebih banyak kode boilerplate dibandingkan dengan deserialisasi otomatis. Untuk proyek kecil atau prototipe ini dapat diterima, tetapi di production disarankan Moshi atau kotlinx.serialization.
JsonReader dari library Moshi — alat yang kuat untuk parsing JSON streaming. Membaca dokumen token demi token, menggunakan metode beginObject, nextName, nextString, nextInt dan endObject. Pendekatan ini memungkinkan pemrosesan dokumen ukuran berapa pun dengan konsumsi memori yang konstan. Menurut Google (2026), parsing streaming melalui JsonReader 2–3 kali lebih cepat daripada memuat seluruh dokumen ke JsonObject dan mengonsumsi hingga 80% lebih sedikit memori.
val reader = JsonReader(StringReader(json))
reader.beginObject()
while (reader.hasNext()) {
val name = reader.nextName()
when (name) {
"id" -> val id = reader.nextInt()
"name" -> val name = reader.nextString()
"email" -> val email = reader.nextString()
else -> reader.skipValue()
}
}
reader.endObject()
Contoh menunjukkan JsonReader yang mengurai JSON secara streaming. Setiap panggilan nextName() dan nextInt() memindahkan kursor ke token berikutnya. skipValue() melewatkan bidang yang tidak perlu tanpa mengurainya — ini sangat berguna ketika JSON berisi 50 bidang dan hanya 3 yang diperlukan. Hasilnya — konsumsi memori minimal dan kecepatan maksimal.
XML masih digunakan di proyek Android untuk sumber daya dan di layanan SOAP aplikasi perusahaan. Di Android, XmlPullParser bawaan menyediakan analisis streaming dengan konsumsi memori minimal — tidak memuat pohon DOM, tetapi menghasilkan peristiwa START_TAG, TEXT, END_TAG. iOS menggunakan XMLParser dengan pendekatan delegasi: metode parser(didStartElement:) dan parser(foundCharacters:) memproses elemen secara berurutan.
CSV — format paling sederhana untuk ekspor dan impor data tabel. Di aplikasi seluler, CSV digunakan untuk mengekspor laporan, memuat direktori (daftar negara, mata uang, kode) dan sinkronisasi data offline. Untuk parsing CSV, library streaming cocok: Apache Commons CSV dan OpenCSV memproses file baris per baris, meng-escape tanda kutip dan koma di dalam nilai. Di iOS, parsing CSV dapat dilakukan melalui delimiter NSString.components(separatedBy:) dengan penanganan kasus tepi.
class CSVParser: NSObject, XMLParserDelegate {
private var currentItem: [String: String] = [:]
private var currentElement: String = ""
func parser(
_ parser: XMLParser,
didStartElement elementName: String,
namespaceURI: String?,
qualifiedName qName: String?,
attributes attributeDict: [String: String]
) {
currentElement = elementName
if elementName == "item" {
currentItem = [:]
}
}
func parser(_ parser: XMLParser,
foundCharacters string: String) {
currentItem[currentElement] = string
}
}
Contoh delegat XMLParser di iOS untuk mengurai feed RSS. Metode didStartElement dipanggil pada setiap tag pembuka, foundCharacters mengembalikan konten teks di antara tag, didEndElement mengakhiri elemen. Arsitektur berbasis peristiwa semacam itu memungkinkan pemrosesan XML ukuran berapa pun tanpa memuat pohon DOM ke memori — penting untuk sumber daya terbatas perangkat seluler.
Di Android, pemilihan parser CSV tergantung pada volume data. OpenCSV mendukung fluent API, anotasi untuk pemetaan ke POJO dan pemisah kustom. Apache Commons CSV — lebih tingkat rendah, tetapi lebih cepat pada file besar. Untuk kasus sederhana (1–2 kolom), analisis manual melalui String.split(",") dengan penanganan escape sudah cukup. Untuk proyek production dengan file CSV besar, OpenCSV disarankan.
Protocol Buffers dari Google — format serialisasi biner, unggul dari JSON dalam kecepatan dan kekompakan. Pesan Protobuf memakan ruang 3–6 kali lebih sedikit daripada JSON yang setara dan diurai 4–10 kali lebih cepat berkat format biner dan skema yang kaku. Kekurangan utama: kurangnya keterbacaan manusia dan kebutuhan untuk menghasilkan kode dari file .proto melalui kompiler protoc.
Parsing streaming Protobuf diimplementasikan melalui CodedInputStream — klien membaca bidang saat tiba tanpa memuat seluruh pesan. Setiap bidang memiliki tag (nomor + tipe), dan parser dapat melewatkan bidang yang tidak dikenal. Menurut Google (2026), analisis streaming Protobuf mengonsumsi hingga 90% lebih sedikit memori saat memproses pesan dari 1 MB, yang sangat penting untuk perangkat seluler dengan RAM terbatas. Protobuf-lite — versi khusus untuk Android, dioptimalkan untuk ukuran kode yang dihasilkan.
Pertanyaan yang Sering Diajukan
JSONSerialization — parsing manual yang mengembalikan Any (Dictionary, Array) tanpa tipifikasi. JSONDecoder — deserialisasi otomatis ke tipe Codable. JSONSerialization memberikan fleksibilitas untuk struktur dinamis, JSONDecoder — kecepatan dan keamanan tipe untuk skema yang diketahui. Di production disarankan JSONDecoder.
Parsing streaming wajib untuk respons dari 500 KB, saat mengurai feed RSS/Atom dan saat menganalisis file di perangkat dengan memori terbatas. Untuk respons API tipikal hingga 100 KB, deserialisasi otomatis melalui JSONDecoder atau Moshi lebih disukai — kode lebih bersih dan lebih cepat dikembangkan.
Android SDK mencakup org.json (JSONObject, JSONArray), XmlPullParser (XML) dan android.util.JsonReader. Untuk CSV, YAML dan Protobuf diperlukan library tambahan: OpenCSV untuk CSV, SnakeYAML untuk YAML, protobuf-javalite untuk Protobuf.
Gunakan mode lenient di kotlinx.serialization atau JsonReader.setLenient(true) di Moshi — memaafkan koma ekstra, tanda kutip yang tidak di-escape, dan komentar satu baris. Untuk validasi lengkap, terapkan pengujian kontrak melalui Pact atau Spring Cloud Contract.
SAX (Simple API for XML) — parser XML streaming yang menghasilkan peristiwa startElement, characters, endElement saat menelusuri dokumen. Diimplementasikan melalui XmlPullParser di Android dan XMLParser di iOS. Diterapkan di pembaca RSS, sinkronisasi data offline, dan pemrosesan file SVG.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga