Parsing у мобилним апликацијама: суштина, формати података и процес

Аутор: IT Sectr Објављено: 2026-03-08 Време читања: 8 мин

Parsing — процес синтаксне анализе структурираних података, који извлачи информације из JSON, XML, CSV или Protobuf за употребу у апликацији. Према Square Engineering (2025), избор стратегије parsing-а директно утиче на перформансе мобилне апликације. Стриминг parsing омогућуће обраду мегабајтова података без учитавања целог документа у меморију.

Главно

  • Parsing — рашчлањивање структурираног текста на лексеме за извлачење података без обавезне типизације.
  • JSON — најпопуларнији формат за REST API у мобилним апликацијама на iOS и Android.
  • Стриминг parsing штеди меморију при анализи великих датотека и RSS федова.
  • Code generation — генерише парсер у фази компилације, убрзавајући runtime 2–4 пута.
  • Protobuf — бинарни формат, 3–6 пута компактнији од JSON-а и бржи у parsing-у.

Шта је parsing?

Parsing (синтаксна анализа) — процес претварања низа знакова у структурирани приказ погодан за програмску обраду. У контексту мобилног развоја, под parsing-ом се подразумева анализа одговора сервера, конфигурационих датотека, локалног кеша и датотека ресурса. Сваки формат захтева сопствени приступ: JSON — лаган и уграђен у SDK, XML — строг са валидацијом XSD шеме, CSV — минималистички за табеларне податке, Protobuf — бинарни са чврстом шемом.

Фазе синтаксне анализе

Сваки парсер, без обзира на формат, пролази кроз три фазе. Лексичка анализа разбија сирови текст на лексеме: кључеве, низове, бројеве, раздвајнике и коментаре. Синтаксна анализа проверава исправност граматике — баланс заграда у JSON-у, исправност угњежђивања тагова у XML-у. Изградња излазне структуре формира објектни приказ: JSONObject, Map или токен стрим за даљу обраду. Према Apple (2026), уграђени Foundation парсер на iOS-у користи лењиву анализу — валидира само почетак JSON-а, штедећи ресурсе.

Ручни parsing напрам аутоматским библиотекама

Ручни parsing (JSONSerialization, XmlPullParser) пружа потпуну контролу над процесом и користан је за нестандардне формате или потребу за прилагођеном валидацијом сваког поља. Аутоматске библиотеке (JSONDecoder, Moshi, kotlinx.serialization) убрзавају развој, али скривају детаље обраде грешака. Избор зависи од захтева: ако је структура података динамична или непозната унапред — ручни parsing је пожељнији. Ако је шема фиксна — аутоматска десеријализација скраћује код за 60–70%.

Која је разлика између parsing-а и десеријализације

Parsing — шира операција: може се извршавати стримовски и не мора да креира типизовани објекат. Десеријализација — посебан случај parsing-а, чији је резултат увек инстанца унапред познате класе са конкретним типовима својстава. JSON парсер ће рашчланити документ на Map или JsonElement, а десеријализатор ће претворити исти JSON у конкретан објекат User, Order или Product са познатим пољима и њиховим типовима.

КарактеристикаParsingДесеријализација
РезултатJsonElement, Map, токен стримТипизовани објекат (User, Order)
Стрим начинДа (SAX, JsonReader)Не (цео објекат у меморији)
ТипизацијаОпционална, динамички типовиОбавезна, статички типови
ПримјерXmlPullParser.next(), SAX eventsjson.decodeFromString<User>()

Стриминг parsing — главна предност parsing-а над десеријализацијом. XmlPullParser на Android-у рашчлањује XML док га чита, не учитавајући цео докуменат у радну меморију. Ово је критично за велике API одговоре, парсирање RSS федова са стотинама елемената или обраду низа хиљада JSON објеката из серверског дампа. Стрим парсер чита токен по токен, трошећи константну количину меморије без обзира на величину документа.

Parsing JSON-а у мобилним апликацијама

JSON — доминантни формат размене података. На iOS-у, уграђени JSONSerialization рашчлањује JSON у Any, а JSONDecoder — директно у Codable структуру. На Android-у, стандардни org.json пружа JSONObject и JSONArray за ручну анализу. Gson и Moshi додају аутоматску конверзију. Избор између ручног и аутоматског приступа — прва архитектурна одлука мрежног слоја.

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")
    // обрада корисника
}

Ручни parsing кроз org.json је користан када је структура одговора непозната унапред или се значајно разликује. Овакав приступ пружа потпуну контролу над обрадом грешака и nullable пољима, али захтева више шаблонског кода у поређењу са аутоматском десеријализацијом. За мале пројекте или прототипове је прихватљиво, али у продукцији се препоручује Moshi или kotlinx.serialization.

JSONReader за стрим анализу

JsonReader из Moshi библиотеке — моћан алат за стриминг parsing JSON-а. Чита докуменат токен по токен, користећи методе beginObject, nextName, nextString, nextInt и endObject. Овакав приступ омогућуће обраду докумената било које величине са константним трошком меморије. Према Google (2026), стриминг parsing кроз JsonReader је 2–3 пута бржи од учитавања целог документа у JsonObject и троши до 80% мање меморије.

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

У примјеру је приказан JsonReader који рашчлањује JSON стримовски. Сваки позив nextName() и nextInt() помиче курзор на следећи токен. skipValue() прескаче непотребна поља без њиховог рашчлањивања — ово је посебно корисно када JSON садржи 50 поља, а потребно је само 3. Резултат — минимална потрошња меморије и максимална брзина.

Parsing XML-а и CSV-а

XML се и даље користи у Android пројектима за ресурсе и у SOAP сервисима корпоративних апликација. На Android-у, уграђени XmlPullParser омогућуће стрим анализу са минималним трошком меморије — не учитава DOM дрво, већ генерише догађаје START_TAG, TEXT, END_TAG. iOS користи XMLParser са делегатским приступом: методе parser(didStartElement:) и parser(foundCharacters:) обрађују елементе секвенцијално.

CSV у мобилном развоју

CSV — најједноставнији формат за извоз и увоз табеларних података. У мобилним апликацијама, CSV се користи за извоз извештаја, учитавање речника (спискови земаља, валута, кодова) и синхронизацију офлајн података. За parsing CSV-а погодне су стрим библиотеке: Apache Commons CSV и OpenCSV обрађују датотеке ред по ред, екранујући наводнике и запете унутар вредности. На iOS-у, CSV parsing се може реализовати кроз делимитер NSString.components(separatedBy:) са обрадом изузетних случајева.

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

Примјер XMLParser делегата на iOS-у за рашчлањивање RSS феда. Метода didStartElement се позива на сваком отварајућем тагу, foundCharacters враћа текстуални садржај између тагова, didEndElement завршава елемент. Оваква догађајна архитектура омогућуће обраду XML-а било које величине без учитавања DOM дрвета у меморију — критично за ограничене ресурсе мобилних уређаја.

Поређење CSV библиотека за Android

На Android-у, избор CSV парсера зависи од обима података. OpenCSV подржава fluent API, анотације за мапирање на POJO и прилагођене раздвајнике. Apache Commons CSV — нижег нивоа, али бржи на великим датотекама. За једноставне случајеве (1–2 колоне) довољна је ручна анализа кроз String.split(",") са обрадом екрановања. За продукцијске пројекте са великим CSV датотекама, препоручује се OpenCSV.

Protobuf и стриминг parsing

Protocol Buffers од Google-а — бинарни формат серијализације, надмашъујући JSON по брзини и компактности. Protobuf порука заузима 3–6 пута мање простора од еквивалентног JSON-а и рашчлањује се 4–10 пута брже захваљујући бинарном формату и чврстој шеми. Главни недостаци: недостатак људске читљивости и потреба за генерисањем кода из .proto датотека кроз protoc компилер.

Стриминг parsing Protobuf-а се реализује кроз CodedInputStream — клијент чита поља како стижу без учитавања целе поруке. Свако поље има таг (број + тип), и парсер може да прескочи непозната поља. Према Google (2026), стриминг анализа Protobuf-а троши до 90% мање меморије при обради порука од 1 MB, што је критично за мобилне уређаје са ограниченом RAM-ом. Protobuf-lite — посебна верзија за Android, оптимизована по величини генерисаног кода.

Често постављана питања

По чему се разликује JSONSerialization од JSONDecoder-а?

JSONSerialization — ручни parsing који враћа Any (Dictionary, Array) без типизације. JSONDecoder — аутоматска десеријализација у Codable типове. JSONSerialization пружа флексибилност за динамичке структуре, JSONDecoder — брзину и типску безбедност за познате шеме. У продукцији се препоручује JSONDecoder.

Када користити стриминг parsing уместо учитавања целог документа?

Стриминг parsing је обавезан за одговоре од 500 KB, парсирање RSS/Atom федова и анализу датотека на уређајима са ограниченом меморијом. За типичне API одговоре до 100 KB, аутоматска десеријализација кроз JSONDecoder или Moshi је пожељнија — код је чишћи и брже се развија.

Који формати података су подржани у Android SDK из кутије?

Android SDK укључује org.json (JSONObject, JSONArray), XmlPullParser (XML) и android.util.JsonReader. За CSV, YAML и Protobuf потребне су додатне библиотеке: OpenCSV за CSV, SnakeYAML за YAML, protobuf-javalite за Protobuf.

Шта радити када је JSON са сервера неисправан?

Користите lenient начин у kotlinx.serialization или JsonReader.setLenient(true) у Moshi-ју — прашта вишкове запете, неекраниране наводнике и једноредне коментаре. За потпуну валидацију, вдружите уговорно тестирање кроз Pact или Spring Cloud Contract.

Шта је SAX parsing и где се примењује?

SAX (Simple API for XML) — стрим XML парсер који генерише догађаје startElement, characters, endElement приликом обиласка документа. Реализован кроз XmlPullParser на Android-у и XMLParser на iOS-у. Примењује се у RSS читачима, синхронизацији офлајн података и обради SVG датотека.

Закључак

  • Parsing — основна операција анализе структурираних података, шира од десеријализације: може да буде стримовски и не захтева типизацију.
  • JSON — главни формат за REST API у мобилном развоју; подржан од JSONSerialization (iOS) и org.json (Android).
  • Стриминг parsing кроз JsonReader, XmlPullParser и SAX штеди меморију и критичан је за велике документе.
  • Protobuf — најбржи и најкомпактнији формат, препоручен за high-load и вишеплатформне системе.
  • XMLPullParser на Android-у и XMLParser на iOS-у — стандардни алати за стриминг parsing XML-а са догађајним моделом.
  • CSV парсери (OpenCSV, Apache Commons CSV) су корисни за извоз извештаја и учитавање референцих података.
  • Избор између ручног и аутоматског parsing-а зависи од величине података, промењивости шеме и меморијских захтева уређаја.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође