Parsing — ilovada foydalanish uchun JSON, XML, CSV yoki Protobuf dan ma'lumot chiqaradigan strukturalangan ma'lumotlarni sintaktik tahlil qilish jarayoni. Square Engineering (2025) ma'lumotlariga ko'ra, parsing strategiyasini tanlash to'g'ridan-to'g'ri mobil ilova ishlashiga ta'sir qiladi. Oqimli parsing butun hujjatni xotiraga yuklamasdan megabayt ma'lumotlarni qayta ishlash imkonini beradi.
Asosiy
Parsing (sintaktik tahlil) — belgilar ketma-ketligini dasturiy qayta ishlash uchun yaroqli strukturalangan ko'rinishga aylantirish jarayoni. Mobil ishlab chiqish kontekstida parsing deganda server javoblarini, konfiguratsiya fayllarini, lokal keshni va resurs fayllarini tahlil qilish tushuniladi. Har bir format o'z yondashuvini talab qiladi: JSON — yengil va SDK ga o'rnatilgan, XML — XSD sxema validatsiyasi bilan qat'iy, CSV — jadval ma'lumotlari uchun minimalist, Protobuf — qattiq sxemali ikkilik format.
Har qanday parser, formatdan qat'iy nazar, uch bosqichdan o'tadi. Leksik tahlil xom matnni leksemalarga ajratadi: kalitlar, qatorlar, raqamlar, ajratgichlar va sharhlar. Sintaktik tahlil grammatikaning to'g'riligini tekshiradi — JSON da qavslar muvozanati, XML da teglarning to'g'ri joylashishi. Chiqish strukturasini qurish obyekt ko'rinishini shakllantiradi: JSONObject, Map yoki keyingi qayta ishlash uchun token oqimi. Apple (2026) ma'lumotlariga ko'ra, iOS da o'rnatilgan Foundation parseri dangasa tahlildan foydalanadi — resurslarni tejab, faqat JSON ning boshini tekshiradi.
Qo'lda parsing (JSONSerialization, XmlPullParser) jarayon ustidan to'liq nazorat beradi va nostandart formatlar yoki har bir maydonning maxsus validatsiyasi zarur bo'lganda foydalidir. Avtomatik kutubxonalar (JSONDecoder, Moshi, kotlinx.serialization) rivojlanishni tezlashtiradi, ammo xato boshqarish tafsilotlarini yashiradi. Tanlov talablarga bog'liq: agar ma'lumot strukturasi dinamik yoki oldindan noma'lum bo'lsa — qo'lda parsing afzal. Agar sxema sobit bo'lsa — avtomatik deserializatsiya kodni 60–70% qisqartiradi.
Parsing — kengroq operatsiya: oqimli bajarilishi mumkin va majburiy tipizatsiyalangan obyekt yaratmaydi. Deserializatsiya — parsingning alohida holati, natijasi har doim oldindan ma'lum sinfning aniq xususiyat turlari bilan namunasidir. JSON parseri hujjatni Map yoki JsonElement ga ajratadi, deserializator esa xuddi shu JSON ni ma'lum maydonlari va turlari bilan aniq User, Order yoki Product obyektiga aylantiradi.
| Xarakteristika | Parsing | Deserializatsiya |
|---|---|---|
| Natija | JsonElement, Map, token oqimi | Tipizatsiyalangan obyekt (User, Order) |
| Oqim rejimi | Ha (SAX, JsonReader) | Yo'q (butun obyekt xotirada) |
| Tipizatsiya | Majburiy emas, dinamik turlar | Majburiy, statik turlar |
| Misol | XmlPullParser.next(), SAX events | json.decodeFromString<User>() |
Oqimli parsing — parsingning deserializatsiyadan asosiy ustunligi. Android da XmlPullParser XML ni o'qiyotganda tahlil qiladi, butun hujjatni operativ xotiraga yuklamaydi. Bu katta API javoblari, yuzlab elementli RSS lentalarini pars qilish yoki server dumpidan minglab JSON obyektlarini qayta ishlash uchun juda muhimdir. Oqim parseri tokenma-token o'qiydi, hujjat hajmidan qat'iy nazar doimiy miqdorda xotira sarflaydi.
JSON — dominant ma'lumot almashish formati. iOS da o'rnatilgan JSONSerialization JSON ni Any ga, JSONDecoder esa to'g'ridan-to'g'ri Codable strukturasiga aylantiradi. Android da standart org.json qo'lda tahlil qilish uchun JSONObject va JSONArray ni taqdim etadi. Gson va Moshi avtomatik konvertatsiya qo'shadi. Qo'lda va avtomatik yondashuv o'rtasidagi tanlov — tarmoq qatlamining birinchi arxitektura qarori.
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")
// foydalanuvchini qayta ishlash
}
org.json orqali qo'lda parsing javob strukturasi oldindan noma'lum bo'lganda yoki sezilarli darajada farq qilganda foydalidir. Bunday yondashuv xato boshqaruvi va nullable maydonlar ustidan to'liq nazorat beradi, ammo avtomatik deserializatsiyaga nisbatan ko'proq shablon kod talab qiladi. Kichik loyihalar yoki prototiplar uchun bu maqbul, ammo production da Moshi yoki kotlinx.serialization tavsiya etiladi.
JsonReader Moshi kutubxonasidan — oqimli JSON parsing uchun kuchli vosita. beginObject, nextName, nextString, nextInt va endObject metodlaridan foydalanib, hujjatni tokenma-token o'qiydi. Bunday yondashuv doimiy xotira sarfi bilan istalgan hajmdagi hujjatlarni qayta ishlash imkonini beradi. Google (2026) ma'lumotlariga ko'ra, JsonReader orqali oqimli parsing butun hujjatni JsonObject ga yuklashdan 2–3 marta tezroq va 80% gacha kam xotira sarflaydi.
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()
Misolda JSON ni oqimli tahlil qiluvchi JsonReader ko'rsatilgan. Har bir nextName() va nextInt() chaqiruvi kursorni keyingi token'ga siljitadi. skipValue() keraksiz maydonlarni tahlil qilmasdan o'tkazib yuboradi — bu JSON 50 maydonni o'z ichiga olganda va faqat 3 tasi kerak bo'lganda ayniqsa foydalidir. Natija — minimal xotira sarfi va maksimal tezlik.
XML hali ham Android loyihalarida resurslar va korporativ ilovalarning SOAP xizmatlari uchun ishlatiladi. Android da o'rnatilgan XmlPullParser minimal xotira sarfi bilan oqimli tahlilni ta'minlaydi — DOM daraxtini yuklamaydi, START_TAG, TEXT, END_TAG hodisalarini yaratadi. iOS XMLParser dan delegat yondashuvi bilan foydalanadi: parser(didStartElement:) va parser(foundCharacters:) metodlari elementlarni ketma-ket qayta ishlaydi.
CSV — jadval ma'lumotlarini eksport va import qilish uchun eng oddiy format. Mobil ilovalarda CSV hisobotlarni eksport qilish, ma'lumotnomalarni yuklash (mamlakatlar, valyutalar, kodlar ro'yxati) va oflayn ma'lumotlarni sinxronlashtirish uchun ishlatiladi. CSV parsingi uchun oqimli kutubxonalar mos keladi: Apache Commons CSV va OpenCSV fayllarni satrma-satr qayta ishlaydi, qiymatlar ichidagi qo'shtirnoqlarni va vergullarni ekranlashtiradi. iOS da CSV parsingi NSString.components(separatedBy:) delimiteri orqali chekka holatlarni boshqarish bilan amalga oshirilishi mumkin.
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
}
}
RSS lentasini tahlil qilish uchun iOS da XMLParser delegati namunasi. didStartElement metodi har bir ochilish tegida chaqiriladi, foundCharacters teglar orasidagi matn mazmunini qaytaradi, didEndElement elementni tugatadi. Bunday hodisa arxitekturasi DOM daraxtini xotiraga yuklamasdan istalgan hajmdagi XML ni qayta ishlash imkonini beradi — mobil qurilmalarning cheklangan resurslari uchun juda muhim.
Android da CSV parserini tanlash ma'lumotlar hajmiga bog'liq. OpenCSV fluent API, POJO ga xaritalash uchun annotatsiyalar va maxsus ajratgichlarni qo'llab-quvvatlaydi. Apache Commons CSV — pastroq darajali, ammo katta fayllarda tezroq. Oddiy holatlarda (1–2 ustun) ekranlashtirish bilan String.split(",") orqali qo'lda tahlil qilish etarli. Katta CSV fayllari bo'lgan production loyihalar uchun OpenCSV tavsiya etiladi.
Protocol Buffers Google dan — tezlik va ixchamlik bo'yicha JSON dan ustun bo'lgan ikkilik seriyalash formati. Protobuf xabari ekvivalent JSON dan 3–6 marta kam joy egallaydi va ikkilik format va qattiq sxema tufayli 4–10 marta tezroq tahlil qilinadi. Asosiy kamchiliklar: inson o'qishi qiyinligi va protoc kompilyatori orqali .proto fayllaridan kod yaratish zarurati.
Protobuf ning oqimli parsingi CodedInputStream orqali amalga oshiriladi — mijoz butun xabarni yuklamasdan maydonlarni kelishi bilan o'qiydi. Har bir maydon teg (raqam + tur) ga ega va parser noma'lum maydonlarni o'tkazib yuborishi mumkin. Google (2026) ma'lumotlariga ko'ra, Protobuf ni oqimli tahlil qilish 1 MB dan xabarlarni qayta ishlashda 90% gacha kam xotira sarflaydi ‖ bu cheklangan RAM li mobil qurilmalar uchun juda muhimdir. Protobuf-lite — Android uchun maxsus versiya, yaratilgan kod hajmiga qarab optimallashtirilgan.
Ko'p beriladigan savollar
JSONSerialization — tipizatsiyasiz Any (Dictionary, Array) qaytaradigan qo'lda parsing. JSONDecoder — Codable turlariga avtomatik deserializatsiya. JSONSerialization dinamik strukturalar uchun moslashuvchanlik beradi, JSONDecoder — ma'lum sxemalar uchun tezlik va tip xavfsizligi. Production da JSONDecoder tavsiya etiladi.
Oqimli parsing 500 KB dan javoblarda, RSS/Atom lentalarini pars qilishda va cheklangan xotirali qurilmalarda fayllarni tahlil qilishda majburiydir. 100 KB gacha odatdagi API javoblari uchun JSONDecoder yoki Moshi orqali avtomatik deserializatsiya afzal — kod tozaroq va tezroq ishlab chiqiladi.
Android SDK org.json (JSONObject, JSONArray), XmlPullParser (XML) va android.util.JsonReader ni o'z ichiga oladi. CSV, YAML va Protobuf uchun qo'shimcha kutubxonalar talab qilinadi: CSV uchun OpenCSV, YAML uchun SnakeYAML, Protobuf uchun protobuf-javalite.
kotlinx.serialization da lenient rejimidan yoki Moshi da JsonReader.setLenient(true) dan foydalaning — ortiqcha vergullarni, ekranlashtirilmagan qo'shtirnoqlarni va bir qatorli sharhlarni kechiradi. To'liq validatsiya uchun Pact yoki Spring Cloud Contract orqali kontrakt testini joriy qiling.
SAX (Simple API for XML) — hujjatni aylanib chiqishda startElement, characters, endElement hodisalarini yaratadigan oqimli XML parseri. Android da XmlPullParser va iOS da XMLParser orqali amalga oshirilgan. RSS o'quvchilarda, oflayn ma'lumotlarni sinxronlashtirishda va SVG fayllarini qayta ishlashda qo'llaniladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.