Parsing di Aplikasi Seluler: Esensi, Format Data dan Proses

Penulis: IT Sectr Diterbitkan: 2026-03-08 Waktu membaca: 8 mnt

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 — penguraian teks terstruktur menjadi leksem untuk mengekstrak data tanpa tipifikasi wajib.
  • JSON — format paling populer untuk REST API di aplikasi seluler di iOS dan Android.
  • Parsing streaming menghemat memori saat mengurai file besar dan feed RSS.
  • Code generation — menghasilkan parser pada tahap kompilasi, mempercepat runtime 2–4 kali.
  • Protobuf — format biner, 3–6 kali lebih ringkas dari JSON dan lebih cepat dalam parsing.

Apa itu parsing?

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.

Tahapan analisis sintaksis

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 vs library otomatis

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%.

Perbedaan parsing dan deserialisasi

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.

KarakteristikParsingDeserialisasi
HasilJsonElement, Map, aliran tokenObjek tertipifikasi (User, Order)
Mode streamingYa (SAX, JsonReader)Tidak (seluruh objek di memori)
TipifikasiOpsional, tipe dinamisWajib, tipe statis
ContohXmlPullParser.next(), SAX eventsjson.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.

Parsing JSON di aplikasi seluler

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.

kotlin
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 untuk analisis streaming

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.

kotlin
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.

Parsing XML dan CSV

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 dalam pengembangan seluler

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.

swift
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.

Perbandingan library CSV untuk Android

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.

Protobuf dan parsing streaming

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

Apa perbedaan JSONSerialization dan JSONDecoder?

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.

Kapan menggunakan parsing streaming daripada memuat seluruh dokumen?

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.

Format data apa yang didukung di Android SDK secara bawaan?

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.

Apa yang dilakukan jika JSON dari server tidak valid?

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.

Apa itu SAX parsing dan di mana diterapkan?

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

  • Parsing — operasi fundamental analisis data terstruktur, lebih luas dari deserialisasi: dapat streaming dan tidak memerlukan tipifikasi.
  • JSON — format utama untuk REST API dalam pengembangan seluler; didukung oleh JSONSerialization (iOS) dan org.json (Android).
  • Parsing streaming melalui JsonReader, XmlPullParser dan SAX menghemat memori dan penting untuk dokumen besar.
  • Protobuf — format tercepat dan paling ringkas, direkomendasikan untuk sistem high-load dan multi-platform.
  • XMLPullParser di Android dan XMLParser di iOS — alat standar parsing XML streaming dengan model berbasis peristiwa.
  • Parser CSV (OpenCSV, Apache Commons CSV) berguna untuk mengekspor laporan dan memuat data referensi.
  • Pilihan antara parsing manual dan otomatis tergantung pada ukuran data, variabilitas skema dan persyaratan memori perangkat.

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.

Diskusikan proyek

Baca juga