Parsing — het proces van syntactische analyse van gestructureerde gegevens, dat informatie uit JSON, XML, CSV of Protobuf haalt voor gebruik in de app. Volgens Square Engineering (2025) beïnvloedt de keuze van de parsingstrategie direct de prestaties van de mobiele app. Streaming parsing maakt het mogelijk om megabytes aan gegevens te verwerken zonder het hele document in het geheugen te laden.
Belangrijkste
Parsing (syntactische analyse) — het proces van het omzetten van een tekenreeks in een gestructureerde weergave die geschikt is voor programmatische verwerking. In de context van mobiele ontwikkeling verwijst parsing naar het analyseren van serverreacties, configuratiebestanden, lokale cache en resourcebestanden. Elk formaat vereist zijn eigen benadering: JSON — lichtgewicht en ingebouwd in de SDK, XML — strikt met XSD-schemavalidatie, CSV — minimalistisch voor tabelgegevens, Protobuf — binair met een rigide schema.
Elke parser, ongeacht het formaat, doorloopt drie fasen. Lexicale analyse splitst de ruwe tekst in lexemen: sleutels, tekenreeksen, getallen, scheidingstekens en opmerkingen. Syntactische analyse controleert de grammaticale correctheid — haakjesbalans in JSON, correcte nesting van tags in XML. Opbouw van de uitvoerstructuur vormt de objectweergave: JSONObject, Map of een tokenstroom voor verdere verwerking. Volgens Apple (2026) gebruikt de ingebouwde Foundation-parser op iOS een luie analyse — hij valideert alleen het begin van JSON, wat resources bespaart.
Handmatige parsing (JSONSerialization, XmlPullParser) geeft volledige controle over het proces en is nuttig voor niet-standaard formaten of de noodzaak van aangepaste validatie van elk veld. Automatische bibliotheken (JSONDecoder, Moshi, kotlinx.serialization) versnellen de ontwikkeling, maar verbergen de details van foutafhandeling. De keuze hangt af van de vereisten: als de gegevensstructuur dynamisch of vooraf onbekend is — heeft handmatige parsing de voorkeur. Als het schema vast is — verkort automatische deserialisatie de code met 60–70%.
Parsing — een bredere operatie: kan stream worden uitgevoerd en maakt niet noodzakelijk een getypeerd object aan. Deserialisatie — een specifiek geval van parsing, waarvan het resultaat altijd een instantie is van een vooraf bekende klasse met concrete eigenschapstypen. Een JSON-parser ontleedt het document in een Map of JsonElement, terwijl een deserialisator dezelfde JSON omzet in een concreet object User, Order of Product met bekende velden en hun typen.
| Kenmerk | Parsing | Deserialisatie |
|---|---|---|
| Resultaat | JsonElement, Map, tokenstroom | Getypeerd object (User, Order) |
| Streammodus | Ja (SAX, JsonReader) | Nee (geheel object in geheugen) |
| Typering | Optioneel, dynamische types | Verplicht, statische types |
| Voorbeeld | XmlPullParser.next(), SAX events | json.decodeFromString<User>() |
Streaming parsing — het belangrijkste voordeel van parsing ten opzichte van deserialisatie. XmlPullParser op Android parseert XML tijdens het lezen, zonder het hele document in het werkgeheugen te laden. Dit is cruciaal voor grote API-reacties, het parsen van RSS-feeds met honderden elementen of het verwerken van een array met duizenden JSON-objecten uit een serverdump. Een streamparser leest token voor token en verbruikt een constante hoeveelheid geheugen, ongeacht de documentgrootte.
JSON — het dominante gegevensuitwisselingsformaat. Op iOS parseert de ingebouwde JSONSerialization JSON naar Any, en JSONDecoder — direct naar een Codable-structuur. Op Android biedt de standaard org.json JSONObject en JSONArray voor handmatige analyse. Gson en Moshi voegen automatische conversie toe. De keuze tussen handmatige en automatische benadering — de eerste architectuurbeslissing van de netwerklaag.
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")
// gebruikersverwerking
}
Handmatige parsing via org.json is nuttig wanneer de responsstructuur vooraf onbekend is of sterk varieert. Deze benadering geeft volledige controle over foutafhandeling en nullable-velden, maar vereist meer boilerplate-code vergeleken met automatische deserialisatie. Voor kleine projecten of prototypes is dit acceptabel, maar in productie wordt Moshi of kotlinx.serialization aanbevolen.
JsonReader uit de Moshi-bibliotheek — een krachtig hulpmiddel voor streaming JSON-parsing. Het leest het document token voor token met behulp van de methoden beginObject, nextName, nextString, nextInt en endObject. Deze benadering maakt het mogelijk documenten van elke grootte te verwerken met een constant geheugenverbruik. Volgens Google (2026) is streaming parsing via JsonReader 2–3 keer sneller dan het laden van het hele document in JsonObject en verbruikt het tot 80% minder geheugen.
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()
Het voorbeeld toont JsonReader die JSON stream parseert. Elke aanroep van nextName() en nextInt() verplaatst de cursor naar de volgende token. skipValue() slaat onnodige velden over zonder ze te parsen — dit is vooral handig wanneer JSON 50 velden bevat en er slechts 3 nodig zijn. Het resultaat — minimaal geheugenverbruik en maximale snelheid.
XML wordt nog steeds gebruikt in Android-projecten voor resources en in SOAP-services van bedrijfstoepassingen. Op Android biedt de ingebouwde XmlPullParser streaming analyse met minimaal geheugenverbruik — hij laadt geen DOM-boom, maar genereert START_TAG-, TEXT- en END_TAG-gebeurtenissen. iOS gebruikt XMLParser met een delegate-benadering: de methoden parser(didStartElement:) en parser(foundCharacters:) verwerken elementen sequentieel.
CSV — het eenvoudigste formaat voor het exporteren en importeren van tabelgegevens. In mobiele apps wordt CSV gebruikt voor het exporteren van rapporten, het laden van naslagwerken (lijsten van landen, valuta, codes) en het synchroniseren van offline gegevens. Voor CSV-parsing zijn streambibliotheken geschikt: Apache Commons CSV en OpenCSV verwerken bestanden regel voor regel, waarbij aanhalingstekens en komma's binnen waarden worden geescape. Op iOS kan CSV-parsing worden gerealiseerd via de delimiter NSString.components(separatedBy:) met afhandeling van randgevallen.
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
}
}
Voorbeeld van een XMLParser-delegate op iOS voor het parsen van een RSS-feed. De methode didStartElement wordt aangeroepen bij elke openings-tag, foundCharacters retourneert de tekstinhoud tussen tags, didEndElement sluit het element af. Een dergelijke gebeurtenisgestuurde architectuur maakt het mogelijk XML van elke grootte te verwerken zonder de DOM-boom in het geheugen te laden — cruciaal voor de beperkte resources van mobiele apparaten.
Op Android hangt de keuze van de CSV-parser af van het gegevensvolume. OpenCSV ondersteunt fluent API, annotaties voor mapping naar POJO en aangepaste scheidingstekens. Apache Commons CSV — lager niveau, maar sneller op grote bestanden. Voor eenvoudige gevallen (1–2 kolommen) is handmatige analyse via String.split(",") met escape-afhandeling voldoende. Voor productieprojecten met grote CSV-bestanden wordt OpenCSV aanbevolen.
Protocol Buffers van Google — een binair serialisatieformaat dat JSON overtreft in snelheid en compactheid. Een Protobuf-bericht neemt 3–6 keer minder ruimte in dan equivalente JSON en wordt 4–10 keer sneller geparseerd dankzij het binaire formaat en rigide schema. Belangrijkste nadelen: gebrek aan menselijke leesbaarheid en de noodzaak om code te genereren uit .proto-bestanden via de protoc-compiler.
Streaming parsing van Protobuf wordt geïmplementeerd via CodedInputStream — de client leest velden zodra ze binnenkomen zonder het hele bericht te laden. Elk veld heeft een tag (nummer + type) en de parser kan onbekende velden overslaan. Volgens Google (2026) verbruikt streaming analyse van Protobuf tot 90% minder geheugen bij het verwerken van berichten vanaf 1 MB, wat cruciaal is voor mobiele apparaten met beperkt RAM. Protobuf-lite — een speciale versie voor Android, geoptimaliseerd op grootte van gegenereerde code.
Veelgestelde vragen
JSONSerialization — handmatige parsing die Any (Dictionary, Array) retourneert zonder typering. JSONDecoder — automatische deserialisatie naar Codable-types. JSONSerialization biedt flexibiliteit voor dynamische structuren, JSONDecoder — snelheid en typeveiligheid voor bekende schema's. In productie wordt JSONDecoder aanbevolen.
Streaming parsing is verplicht bij reacties vanaf 500 KB, bij het parsen van RSS/Atom-feeds en bij het analyseren van bestanden op apparaten met beperkt geheugen. Voor typische API-reacties tot 100 KB heeft automatische deserialisatie via JSONDecoder of Moshi de voorkeur — de code is schoner en sneller te ontwikkelen.
De Android SDK bevat org.json (JSONObject, JSONArray), XmlPullParser (XML) en android.util.JsonReader. Voor CSV, YAML en Protobuf zijn extra bibliotheken nodig: OpenCSV voor CSV, SnakeYAML voor YAML, protobuf-javalite voor Protobuf.
Gebruik de lenient modus in kotlinx.serialization of JsonReader.setLenient(true) in Moshi — het negeert overbodige komma's, niet-geescape aanhalingstekens en commentaar op een enkele regel. Voor volledige validatie implementeer contracttesten via Pact of Spring Cloud Contract.
SAX (Simple API for XML) — een streaming XML-parser die gebeurtenissen startElement, characters, endElement genereert tijdens het doorlopen van het document. Geïmplementeerd via XmlPullParser op Android en XMLParser op iOS. Toegepast in RSS-lezers, offline gegevenssynchronisatie en verwerking van SVG-bestanden.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook