Parsing v mobilních aplikacích: podstata, formáty dat a proces

Autor: IT Sectr Publikováno: 2026-03-08 Doba čtení: 8 min

Parsing — proces syntaktické analýzy strukturovaných dat, který extrahuje informace z JSON, XML, CSV nebo Protobuf pro použití v aplikaci. Podle Square Engineering (2025), výběr strategie parsingu přímo ovlivňuje výkon mobilní aplikace. Streamovací parsing umožňuje zpracovávat megabajty dat bez nahrávání celého dokumentu do paměti.

Hlavní

  • Parsing — rozklad strukturovaného textu na lexémy pro extrakci dat bez povinné typizace.
  • JSON — nejoblíbenější formát pro REST API v mobilních aplikacích na iOS a Android.
  • Streamovací parsing šetří paměť při analýze velkých souborů a RSS kanálů.
  • Code generation — generuje parser ve fázi kompilace, zrychluje runtime 2–4krát.
  • Protobuf — binární formát, 3–6krát kompaktnější než JSON a rychlejší v parsingu.

Co je parsing?

Parsing (syntaktická analýza) — proces převodu sekvence znaků do strukturované reprezentace vhodné pro programové zpracování. V kontextu mobilního vývoje se parsingem rozumí analýza odpovědí serveru, konfiguračních souborů, lokální cache a souborů zdrojů. Každý formát vyžaduje vlastní přístup: JSON — lehký a integrovaný v SDK, XML — přísný s validací schématu XSD, CSV — minimalistický pro tabulková data, Protobuf — binární s pevným schématem.

Fáze syntaktické analýzy

Každý parser, bez ohledu na formát, prochází třemi fázemi. Lexikální analýza rozděluje surový text na lexémy: klíče, řetězce, čísla, oddělovače a komentáře. Syntaktická analýza kontroluje správnost gramatiky — vyváženost závorek v JSON, správnost vnoření tagů v XML. Budování výstupní struktury vytváří objektovou reprezentaci: JSONObject, Map nebo tok tokenů pro další zpracování. Podle Apple (2026), vestavěný parser Foundation na iOS používá línou analýzu — validuje pouze začátek JSON, šetří zdroje.

Ruční parsing vs automatické knihovny

Ruční parsing (JSONSerialization, XmlPullParser) dává úplnou kontrolu nad procesem a je užitečný při nestandardních formátech nebo potřebě vlastní validace každého pole. Automatické knihovny (JSONDecoder, Moshi, kotlinx.serialization) urychlují vývoj, ale skrývají detaily zpracování chyb. Výběr závisí na požadavcích: pokud je struktura dat dynamická nebo předem neznámá — ruční parsing je preferovaný. Pokud je schéma fixní — automatická deserializace zkracuje kód o 60–70%.

Čím se parsing liší od deserializace

Parsing — širší operace: může být proveden streamově a nemusí nutně vytvářet typizovaný objekt. Deserializace — speciální případ parsingu, jehož výsledkem je vždy instance předem známé třídy s konkrétními typy vlastností. JSON parser rozebere dokument na Map nebo JsonElement, zatímco deserializátor přemění stejný JSON na konkrétní objekt User, Order nebo Product se známými poli a jejich typy.

VlastnostParsingDeserializace
VýsledekJsonElement, Map, tok tokenůTypizovaný objekt (User, Order)
Streamovací režimAno (SAX, JsonReader)Ne (celý objekt v paměti)
TypizaceVolitelná, dynamické typyPovinná, statické typy
PříkladXmlPullParser.next(), SAX eventsjson.decodeFromString<User>()

Streamovací parsing — hlavní výhoda parsingu nad deserializací. XmlPullParser na Androidu analyzuje XML během čtení, aniž by načítal celý dokument do operační paměti. To je kritické pro velké odpovědi API, parsing RSS kanálů se stovkami prvků nebo zpracování pole tisíců JSON objektů z výpisu serveru. Streamovací parser čte token po tokenu, spotřebovává konstantní množství paměti bez ohledu na velikost dokumentu.

Parsing JSON v mobilních aplikacích

JSON — dominantní formát výměny dat. Na iOS vestavěný JSONSerialization analyzuje JSON do Any, a JSONDecoder — přímo do struktury Codable. Na Androidu standardní org.json poskytuje JSONObject a JSONArray pro ruční analýzu. Gson a Moshi přidávají automatickou konverzi. Výběr mezi ručním a automatickým přístupem — první architektonické rozhodnutí síťové vrstvy.

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")
    // zpracování uživatele
}

Ruční parsing pomocí org.json je užitečný, když struktura odpovědi je předem neznámá nebo se výrazně mění. Tento přístup dává úplnou kontrolu nad zpracováním chyb a nullable poli, ale vyžaduje více šablonského kódu ve srovnání s automatickou deserializací. Pro malé projekty nebo prototypy je to přijatelné, ale v produkci se doporučuje Moshi nebo kotlinx.serialization.

JSONReader pro streamovou analýzu

JsonReader z knihovny Moshi — výkonný nástroj pro streamovací parsing JSON. Čte dokument token po tokenu pomocí metod beginObject, nextName, nextString, nextInt a endObject. Tento přístup umožňuje zpracovávat dokumenty libovolné velikosti s konstantní spotřebou paměti. Podle Google (2026), streamovací parsing přes JsonReader je 2–3krát rychlejší než načítání celého dokumentu do JsonObject a spotřebovává až o 80% méně paměti.

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

Příklad ukazuje JsonReader, který analyzuje JSON streamově. Každé volání nextName() a nextInt() posouvá kurzor na další token. skipValue() přeskakuje nepotřebná pole bez jejich analýzy — to je užitečné zejména když JSON obsahuje 50 polí a potřebná jsou jen 3. Výsledek — minimální spotřeba paměti a maximální rychlost.

Parsing XML a CSV

XML se stále používá v Android projektech pro zdroje a v SOAP službách podnikových aplikací. Na Androidu vestavěný XmlPullParser poskytuje streamovou analýzu s minimální spotřebou paměti — nenačítá DOM strom, ale generuje události START_TAG, TEXT, END_TAG. iOS používá XMLParser s delegátním přístupem: metody parser(didStartElement:) a parser(foundCharacters:) zpracovávají prvky sekvenčně.

CSV v mobilním vývoji

CSV — nejjednodušší formát pro export a import tabulkových dat. V mobilních aplikacích se CSV používá pro export zpráv, načítání česníků (seznamy zemí, měn, kódů) a synchronizaci offline dat. Pro parsing CSV jsou vhodné streamové knihovny: Apache Commons CSV a OpenCSV zpracovávají soubory řádek po řádku, escapují uvozovky a čárky uvnitř hodnot. Na iOS lze CSV parsing realizovat přes delimiter NSString.components(separatedBy:) s ošetřením okrajových případů.

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

Příklad delegáta XMLParser na iOS pro analýzu RSS kanálu. Metoda didStartElement se volá při každém otevíracím tagu, foundCharacters vrací textový obsah mezi tagy, didEndElement ukončuje prvek. Takováto událostní architektura umožňuje zpracovávat XML libovolné velikosti bez načítání DOM stromu do paměti — kritické pro omezené zdroje mobilních zařízení.

Porovnání CSV knihoven pro Android

Na Androidu závisí výběr CSV parseru na objemu dat. OpenCSV podporuje fluent API, anotace pro mapování na POJO a vlastní oddělovače. Apache Commons CSV — nízkoúrovňovější, ale rychlejší na velkých souborech. Pro jednoduché případy (1–2 sloupce) stačí ruční analýza přes String.split(",") s ošetřením escapování. Pro produkční projekty s velkými CSV soubory se doporučuje OpenCSV.

Protobuf a streamovací parsing

Protocol Buffers od Google — binární formát serializace, překonávající JSON rychlostí a kompaktností. Protobuf zpráva zabírá 3–6krát méně místa než ekvivalentní JSON a je parsována 4–10krát rychleji díky binárnímu formátu a pevnému schématu. Hlavní nevýhody: nedostatek čitelnosti pro člověka a nutnost generování kódu z .proto souborů přes protoc kompilátor.

Streamovací parsing Protobuf se realizuje přes CodedInputStream — klient čte pole při jejich příchodu bez načítání celé zprávy. Každé pole má tag (číslo + typ) a parser může přeskakovat neznámá pole. Podle Google (2026), streamová analýza Protobuf spotřebovává až o 90% méně paměti při zpracování zpráv od 1 MB, což je kritické pro mobilní zařízení s omezenou RAM. Protobuf-lite — speciální verze pro Android, optimalizovaná na velikost generovaného kódu.

Často kladené otázky

Čím se liší JSONSerialization od JSONDecoder?

JSONSerialization — ruční parsing, který vrací Any (Dictionary, Array) bez typizace. JSONDecoder — automatická deserializace do Codable typů. JSONSerialization dává flexibilitu pro dynamické struktury, JSONDecoder — rychlost a typovou bezpečnost pro známá schémata. V produkci se doporučuje JSONDecoder.

Kdy použít streamovací parsing místo načítání celého dokumentu?

Streamovací parsing je povinný při odpovědích od 500 KB, při parsování RSS/Atom kanálů a při analýze souborů na zařízeních s omezenou pamětí. Pro běžné API odpovědi do 100 KB je automatická deserializace přes JSONDecoder nebo Moshi preferovaná — kód je čistší a rychleji se vyvíjí.

Jaké formáty dat jsou podporovány v Android SDK z krabice?

Android SDK obsahuje org.json (JSONObject, JSONArray), XmlPullParser (XML) a android.util.JsonReader. Pro CSV, YAML a Protobuf jsou vyžadovány další knihovny: OpenCSV pro CSV, SnakeYAML pro YAML, protobuf-javalite pro Protobuf.

Co dělat při neplatném JSON ze serveru?

Použijte lenient režim v kotlinx.serialization nebo JsonReader.setLenient(true) v Moshi — odpouští nadbytečné čárky, neescapované uvozovky a jednořádkové komentáře. Pro úplnou validaci zaveďte kontraktní testování přes Pact nebo Spring Cloud Contract.

Co je SAX parsing a kde se používá?

SAX (Simple API for XML) — streamovací XML parser, který generuje události startElement, characters, endElement při procházení dokumentu. Implementován přes XmlPullParser na Androidu a XMLParser na iOS. Používá se v RSS čtečkách, synchronizaci offline dat a zpracování SVG souborů.

Shrnutí

  • Parsing — základní operace analýzy strukturovaných dat, širší než deserializace: může být streamovací a nevyžaduje typizaci.
  • JSON — hlavní formát pro REST API v mobilním vývoji; podporován JSONSerialization (iOS) a org.json (Android).
  • Streamovací parsing přes JsonReader, XmlPullParser a SAX šetří paměť a je kritický pro velké dokumenty.
  • Protobuf — nejrychlejší a nejkompaktnější formát, doporučený pro high-load a multi-platform systémy.
  • XMLPullParser na Androidu a XMLParser na iOS — standardní nástroje streamovacího parsingu XML s událostním modelem.
  • CSV párser (OpenCSV, Apache Commons CSV) jsou užitečné pro export zpráv a načítání referenčních dat.
  • Výběr mezi ručním a automatickým parsingem závisí na velikosti dat, proměnlivosti schématu a paměťových požadavcích zařízení.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také