Mobil ilovalarda Parsing: mohiyati, ma'lumot formatlari va jarayon

Muallif: IT Sectr Nashr etilgan: 2026-03-08 O'qish vaqti: 8 daq

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 — majburiy tipizatsiyasiz ma'lumot olish uchun strukturalangan matnni leksemalarga ajratish.
  • JSON — iOS va Android mobil ilovalarida REST API uchun eng mashhur format.
  • Oqimli parsing katta fayllar va RSS lentalarini tahlil qilishda xotirani tejaydi.
  • Code generation — kompilyatsiya bosqichida parser yaratadi, runtime ni 2–4 marta tezlashtiradi.
  • Protobuf — ikkilik format, JSON dan 3–6 marta ixchamroq va parsingda tezroq.

Parsing nima?

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.

Sintaktik tahlil bosqichlari

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 va avtomatik kutubxonalar

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 deserializatsiyadan nimasi bilan farq qiladi

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.

XarakteristikaParsingDeserializatsiya
NatijaJsonElement, Map, token oqimiTipizatsiyalangan obyekt (User, Order)
Oqim rejimiHa (SAX, JsonReader)Yo'q (butun obyekt xotirada)
TipizatsiyaMajburiy emas, dinamik turlarMajburiy, statik turlar
MisolXmlPullParser.next(), SAX eventsjson.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.

Mobil ilovalarda JSON parsingi

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.

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")
    // 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.

Oqimli tahlil uchun JSONReader

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.

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()

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 va CSV parsingi

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.

Mobil ishlab chiqishda CSV

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.

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
    }
}

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 uchun CSV kutubxonalarini taqqoslash

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.

Protobuf va oqimli parsing

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 JSONDecoder dan nimasi bilan farq qiladi?

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.

Qachon butun hujjatni yuklash o'rniga oqimli parsingdan foydalanish kerak?

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 da qaysi ma'lumot formatlari qutidan chiqish qo'llab-quvvatlanadi?

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.

Serverdan noto'g'ri JSON kelsa nima qilish kerak?

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 parsing nima va qayerda qo'llaniladi?

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

  • Parsing — strukturalangan ma'lumotlarni tahlil qilishning asosiy operatsiyasi, deserializatsiyadan kengroq: oqimli bo'lishi mumkin va tipizatsiyani talab qilmaydi.
  • JSON — mobil ishlab chiqishda REST API uchun asosiy format; JSONSerialization (iOS) va org.json (Android) tomonidan qo'llab-quvvatlanadi.
  • Oqimli parsing JsonReader, XmlPullParser va SAX orqali xotirani tejaydi va katta hujjatlar uchun juda muhimdir.
  • Protobuf — eng tez va ixcham format, yuqori yuklama va ko'p platformali tizimlar uchun tavsiya etiladi.
  • Android da XMLPullParser va iOS da XMLParser — hodisa modeli bilan oqimli XML parsingning standart vositalari.
  • CSV parserlari (OpenCSV, Apache Commons CSV) hisobotlarni eksport qilish va ma'lumotnomalarni yuklash uchun foydalidir.
  • Qo'lda va avtomatik parsing o'rtasidagi tanlov ma'lumotlar hajmiga, sxema o'zgaruvchanligiga va qurilmaning xotira talablariga bog'liq.

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.

Loyihani muhokama qilish

Shuningdek o'qing