Mobil proqramlarda Parsing: mahiyyət, məlumat formatları və proses

Müəllif: IT Sectr Dərc olunub: 2026-03-08 Oxuma vaxtı: 8 dəq

Parsing — JSON, XML, CSV və ya Protobuf-dan tətbiqdə istifadə üçün məlumat çıxaran strukturlaşdırılmış məlumatların sintaktik analizi prosesidir. Square Engineering (2025) məlumatlarına görə, parsing strategiyasının seçimi birbaşa mobil tətbiqin performansına təsir edir. Axın parsingi bütün sənədi yaddaşa yükləmədən meqabayt məlumatları emal etməyə imkan verir.

Vacib

  • Parsing — məcburi tipizasiya olmadan məlumat çıxarmaq üçün strukturlaşdırılmış mətnin leksemlərə bölünməsi.
  • JSON — iOS və Android-də mobil tətbiqlərdə REST API üçün ən populyar format.
  • Streaming parsing böyük faylların və RSS lentlərinin təhlili zamanı yaddaşa qənaət edir.
  • Code generation — kompilasiya mərhələsində parser yaradaraq runtime-i 2–4 dəfə sürətləndirir.
  • Protobuf — ikili format, JSON-dan 3–6 dəfə daha yığcam və parsingdə daha sürətli.

Parsing nədir?

Parsing (sintaktik analiz) — simvol ardıcıllığının proqram emalı üçün yararlı strukturlaşdırılmış təmsilə çevrilməsi prosesidir. Mobil inkişaf kontekstinda parsing server cavablarının, konfiqurasiya fayllarının, lokal keşin və resurs fayllarının təhlilini əhatə edir. Hər format öz yanaşmasını tələb edir: JSON — yünül və SDK-ya daxil, XML — XSD sxem validasiyası ilə ciddi, CSV — cədvəl məlumatları üçün minimalist, Protobuf — sərt sxemli ikili format.

Sintaktik analizin mərhələri

Hər bir parser, formatdan asılı olmayaraq, üç mərhələdən keçir. Leksik analiz xam mətni leksemlərə ayırır: açarlar, sətrlər, rəqəmlər, ayırıcılar və řərhlər. Sintaktik analiz qrammatikanın düzgünlüyünü yoxlayır — JSON-da mötərizə balansı, XML-də teqlərin düzgün yerləşməsi. Çıxış strukturunun qurulması obyekt təmsilini formalaşdırır: JSONObject, Map və ya sonrakı emal üçün token axını. Apple (2026) məlumatlarına görə, iOS-da daxili Foundation parseri tənbel analizdən istifadə edir — resurslara qənaət edərək yalnız JSON-un əvvəlini yoxlayır.

Əl ilə parsing vs avtomatik kitabxanalar

Əl ilə parsing (JSONSerialization, XmlPullParser) proses üzərində tam nəzarət verir və qeyri-standart formatlarda və ya hər sahənin fərdi validasiyası zürurətində faydalıdır. Avtomatik kitabxanalar (JSONDecoder, Moshi, kotlinx.serialization) inkişafı sürətləndirir, lakin səhv idarəetmə detallarını gizlədir. Seçim tələblərdən asılıdır: məlumat strukturu dinamik və ya əvvəlcədən məlum deyilsə — əl ilə parsing üstünlüklüdür. Sxem sabitdirsə — avtomatik deserializasiya kodu 60–70% qısaltır.

Parsing deserializasiyadan nə ilə fərqlənir

Parsing — daha geniş əməliyyat: axın şəklində yerinə yetirilə bilər və mütləq tipizasiya olunmuş obyekt yaratmır. Deserializasiya — parsingin xüsusi halıdır, nəticəsi həmişə əvvəlcədən məlum sinfin konkret xüsusiyyət növləri ilə nümunəsidir. JSON parseri sənədi Map və ya JsonElement-ə ayırır, deserializator isə eyni JSON-u məlum sahələri və növləri ilə konkret User, Order və ya Product obyektinə çevirir.

XarakteristikaParsingDeserializasiya
NəticəJsonElement, Map, token axınıTipizasiya olunmuş obyekt (User, Order)
Axın rejimiBəli (SAX, JsonReader)Xeyr (bütün obyekt yaddaşda)
Tipizasiyaİxtiyari, dinamik tiplərMəcburi, statik tiplər
NümunəXmlPullParser.next(), SAX eventsjson.decodeFromString<User>()

Axın parsingi — parsingin deserializasiya üzərində əsas üstünlüyüdür. Android-də XmlPullParser XML-i oxuduqca təhlil edir, bütün sənədi operativ yaddaşa yükləmədən. Bu, böyük API cavabları, yüzlərlə elementli RSS lentlərinin parsingi və ya server dump-indan minlərlə JSON obyektinin emalı üçün vacibdir. Axın parseri tokenbətoken oxuyur, sənədin ölçüsündən asılı olmayaraq sabit miqdarda yaddaş istehlak edir.

Mobil tətbiqlərdə JSON parsingi

JSON — dominant məlumat mübadiləsi formatı. iOS-da daxili JSONSerialization JSON-u Any-yə, JSONDecoder isə birbaşa Codable strukturuna çevirir. Android-də standart org.json əl ilə analiz üçün JSONObject və JSONArray təmin edir. Gson və Moshi avtomatik çevirmə əlavə edir. Əl ilə və avtomatik yanaşma arasında seçim şəbəkə qatının ilk memarlıq qərarıdır.

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")
    // istifadəçi emalı
}

org.json vasitəsilə əl ilə parsing cavab strukturu əvvəlcədən məlum olmadıqda və ya çox dəyişən zaman faydalıdır. Bu yanaşma səhv idarəetməsi və nullable sahələr üzərində tam nəzarət verir, lakin avtomatik deserializasiya ilə müqayisədə daha çox şablon kodu tələb edir. Kiçik layihələr və ya prototiplər üçün məqbuldur, lakin production-da Moshi və ya kotlinx.serialization tövsiyə olunur.

Axın analizi üçün JSONReader

JsonReader Moshi kitabxanasından — axın JSON parsingi üçün güclü alətdir. Sənədi tokenbətoken oxuyur, beginObject, nextName, nextString, nextInt və endObject metodlarından istifadə edir. Bu yanaşma sabit yaddaş istehlakı ilə istənilən ölçüdəki sənədləri emal etməyə imkan verir. Google (2026) məlumatlarına görə, JsonReader vasitəsilə axın parsingi bütün sənədi JsonObject-ə yükləməkdən 2–3 dəfə sürətli və 80% daha az yaddaş istehlak edir.

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

Nümunədə JSON-u axın şəklində təhlil edən JsonReader göstərilmişdir. Hər nextName() və nextInt() çağırışı kursoru növbəti tokenə irəlilədir. skipValue() lazımsız sahələri təhlil etmədən keçir — bu, JSON 50 sahə ehtiva etdikdə və yalnız 3-nün lazım olduğu zaman xüsusilə faydalıdır. Nəticə — minimal yaddaş istehlakı və maksimum sürət.

XML və CSV parsingi

XML hələ də Android layihələrində resurslar və korporativ tətbiqlərin SOAP xidmətləri üçün istifadə olunur. Android-də daxili XmlPullParser minimal yaddaş istehlakı ilə axın analizi təmin edir — DOM ağacını yükləmir, START_TAG, TEXT, END_TAG hadisələri yaradır. iOS XMLParser-dən deleqat yanaşması ilə istifadə edir: parser(didStartElement:) və parser(foundCharacters:) metodları elementləri ardıcıl emal edir.

Mobil inkişafda CSV

CSV — cədvəl məlumatlarının ixracı və idxalı üçün ən sadə format. Mobil tətbiqlərdə CSV hesabatların ixracı, arayış kitabçalarının yüklənməsi (ölkə, valyuta, kod siyahıları) və offlayn məlumatların sinxronizasiyası üçün istifadə olunur. CSV parsingi üçün axın kitabxanaları uyğundur: Apache Commons CSVOpenCSV faylları sətrbəsətr emal edir, dəyərlər daxilindəki dırnaqları və vergülləri ekranlaşdırır. iOS-da CSV parsingi NSString.components(separatedBy:) delimiteri ilə kənar halların idarə edilməsi ilə həyata keçirilə bilər.

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 lentinin təhlili üçün iOS-da XMLParser deleqatının nümunəsi. didStartElement metodu hər açılış teqində çağırılır, foundCharacters teqlər arasındakı mətn məzmununu qaytarır, didEndElement elementi bitirir. Belə hadisə arxitekturası DOM ağacını yaddaşa yükləmədən istənilən ölçüdəki XML-i emal etməyə imkan verir — mobil cihazların məhdud resursları üçün vacibdir.

Android üçün CSV kitabxanalarının müqayisəsi

Android-də CSV parserinin seçimi məlumatların həcmindən asılıdır. OpenCSV fluent API, POJO-ını xəritələndirmə üçün annotasiyalar və fərdi ayırıcılar dəstəkləyir. Apache Commons CSV — daha aşağı səviyyəli, lakin böyük fayllarda daha sürətli. Sadə hallarda (1–2 sütun) ekranlaşdırma ilə String.split(",") vasitəsilə əl ilə analiz kifayətdir. Böyük CSV faylları olan production layihələri üçün OpenCSV tövsiyə olunur.

Protobuf və axın parsingi

Protocol Buffers Google-dan — JSON-u sürət və yığcamlıq baxımından üstün olan ikili serializasiya formatıdır. Protobuf mesajı ekvivalent JSON-dan 3–6 dəfə az yer tutur və ikili format və sərt sxem sayəsində 4–10 dəfə sürətli təhlil edilir. Əsas çatışmazlıqlar: insan tərəfindən oxunaqlılığın olmaması və protoc kompilyatoru vasitəsilə .proto fayllarından kod yaratma ehtiyacı.

Protobuf-un axın parsingi CodedInputStream vasitəsilə həyata keçirilir — müştəri bütün mesajı yükləmədən sahələri gəldikcə oxuyur. Hər sahənin bir teqi (nömrə + tip) var və parser məlum olmayan sahələri ötürə bilər. Google (2026) məlumatlarına görə, Protobuf-un axın analizi 1 MB-dan mesajları emal edərkən 90% daha az yaddaş istehlak edir — bu, məhdud RAM-lı mobil cihazlar üçün vacibdir. Protobuf-lite — Android üçün xüsusi versiya, yaradılan kodun ölçüsünə görə optimallaşdırılmışdır.

Tez-tez verilən suallar

JSONSerialization JSONDecoder-dən nə ilə fərqlənir?

JSONSerialization — tipizasiyasız Any (Dictionary, Array) qaytaran əl ilə parsingdir. JSONDecoder — Codable tiplərinə avtomatik deserializasiya. JSONSerialization dinamik strukturlar üçün elastiklik verir, JSONDecoder — məlum sxemlər üçün sürət və tip təhlükəsizliyi. Production-da JSONDecoder tövsiyə olunur.

Nə vaxt bütün sənədi yükləmək əvəzinə axın parsingindən istifadə etməli?

Axın parsingi 500 KB-dan cavablarda, RSS/Atom lentlərinin parsingində və məhdud yaddaşlı cihazlarda faylların təhlilində məcburidir. 100 KB-dan tipik API cavabları üçün JSONDecoder və ya Moshi vasitəsilə avtomatik deserializasiya üstünlüklüdür — kod daha təmiz və daha sürətli hazırlanır.

Android SDK-da hansı məlumat formatları qutudan çıxış dəstəklənir?

Android SDK org.json (JSONObject, JSONArray), XmlPullParser (XML) və android.util.JsonReader daxildir. CSV, YAML və Protobuf üçün əlavə kitabxanalar tələb olunur: CSV üçün OpenCSV, YAML üçün SnakeYAML, Protobuf üçün protobuf-javalite.

Serverdən səhv JSON gəldikdə nə etməli?

kotlinx.serialization-da lenient rejimindən və ya Moshi-də JsonReader.setLenient(true) istifadə edin — artıq vergülləri, ekranlaşdırılmamış dırnaqları və təksətirli şərhləri bağışlayır. Tam validasiya üçün Pact və ya Spring Cloud Contract vasitəsilə kontrakt testini tətbiq edin.

SAX parsing nədir və harada tətbiq olunur?

SAX (Simple API for XML) — sənədi gəzərkən startElement, characters, endElement hadisələri yaradan axın XML parseridir. Android-də XmlPullParser və iOS-da XMLParser vasitəsilə həyata keçirilir. RSS oxuyucularında, offlayn məlumatların sinxronizasiyasında və SVG fayllarının emalında tətbiq olunur.

Nəticələr

  • Parsing — strukturlaşdırılmış məlumatların təhlilinin əsas əməliyyatı, deserializasiyadan daha geniş: axınlı ola bilər və tipizasiya tələb etmir.
  • JSON — mobil inkişafda REST API üçün əsas format; JSONSerialization (iOS) və org.json (Android) tərəfindən dəstəklənir.
  • Axın parsingi JsonReader, XmlPullParser və SAX vasitəsilə yaddaşa qənaət edir və böyük sənədlər üçün vacibdir.
  • Protobuf — ən sürətli və yığcam format, yüksek yüklü və çoxplatformalı sistemlər üçün tövsiyə olunur.
  • Android-də XMLPullParser və iOS-da XMLParser — hadisə modeli ilə axın XML parsinginin standart alətləri.
  • CSV parserləri (OpenCSV, Apache Commons CSV) hesabatların ixracı və istinad məlumatlarının yüklənməsi üçün faydalıdır.
  • Əl ilə və avtomatik parsing arasında seçim məlumatların həcmindən, sxemin dəyişkənliyindən və cihazın yaddaş tələblərindən asılıdır.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun