Parsing sa Mobile Apps: Esensya, Mga Format ng Data at Proseso

May-akda: IT Sectr Nai-publish: 2026-03-08 Oras ng pagbabasa: 8 min

Parsing — ang proseso ng syntactic analysis ng structured data, na kumukuha ng impormasyon mula sa JSON, XML, CSV o Protobuf para magamit sa application. Ayon sa Square Engineering (2025), ang pagpili ng strategy sa parsing ay direktang nakakaapekto sa performance ng mobile app. Streaming parsing ay nagpapahintulot sa pagproseso ng megabytes ng data nang hindi nilo-load ang buong dokumento sa memorya.

Mga Pangunahing

  • Parsing — paghahati-hati ng structured text sa mga token para kunin ang data nang walang mandatoryong typification.
  • JSON — pinakasikat na format para sa REST API sa mga mobile app sa iOS at Android.
  • Streaming parsing ay nakakatipid ng memorya sa pag-parse ng malalaking file at RSS feed.
  • Code generation — gumagawa ng parser sa compilation stage, pinapabilis ang runtime ng 2–4 beses.
  • Protobuf — binary format, 3–6 beses na mas compact kaysa JSON at mas mabilis sa parsing.

Ano ang parsing?

Parsing (syntactic analysis) — ang proseso ng pag-convert ng sequence ng mga character sa structured na representasyon na angkop para sa programmatic processing. Sa konteksto ng mobile development, ang parsing ay tumutukoy sa pagsusuri ng mga server response, configuration file, local cache at resource file. Bawat format ay nangangailangan ng sariling approach: JSON — magaan at naka-build sa SDK, XML — mahigpit na may XSD schema validation, CSV — minimalist para sa tabular data, Protobuf — binary na may matibay na schema.

Mga yugto ng syntactic analysis

Bawat parser, kahit anong format, ay dumadaan sa tatlong yugto. Lexical analysis ay hinahati ang raw text sa mga token: keys, strings, numbers, separators at comments. Syntactic analysis ay sinusuri ang correctness ng grammar — balance ng brackets sa JSON, correctness ng nesting ng tags sa XML. Pagbuo ng output structure ay bumubuo ng object representation: JSONObject, Map, o token stream para sa karagdagang processing. Ayon sa Apple (2026), ang built-in na Foundation parser sa iOS ay gumagamit ng lazy analysis — vina-validate lang ang simula ng JSON, nakakatipid ng resources.

Manual parsing vs automatic libraries

Manual parsing (JSONSerialization, XmlPullParser) ay nagbibigay ng buong kontrol sa proseso at kapaki-pakinabang para sa hindi standard na format o pangangailangan ng custom validation ng bawat field. Automatic libraries (JSONDecoder, Moshi, kotlinx.serialization) ay pinapabilis ang development, ngunit itinatago ang detalye ng error handling. Ang pagpili ay depende sa requirements: kung ang data structure ay dynamic o hindi alam beforehand — manual parsing ay mas gusto. Kung fixed ang schema — automatic deserialization ay nagbabawas ng code ng 60–70%.

Pagkakaiba ng parsing at deserialization

Parsing — mas malawak na operasyon: maaaring isagawa nang streaming at hindi kinakailangang gumawa ng typed object. Deserialization — espesyal na kaso ng parsing, na ang resulta ay palaging instance ng isang klase na alam beforehand na may konkretong uri ng properties. JSON parser ay naghihiwa ng dokumento sa Map o JsonElement, habang ang deserializer ay ginagawang konkretong object na User, Order o Product ang parehong JSON na may alam na fields at kanilang mga uri.

KatangianParsingDeserialization
ResultaJsonElement, Map, token streamNa-type na object (User, Order)
Streaming modeOo (SAX, JsonReader)Hindi (buong object sa memorya)
TypificationOpsyonal, dynamic na uriMandatory, static na uri
HalimbawaXmlPullParser.next(), SAX eventsjson.decodeFromString<User>()

Streaming parsing — pangunahing bentahe ng parsing kaysa deserialization. XmlPullParser sa Android ay nag-parse ng XML habang nagbabasa, nang hindi nilo-load ang buong dokumento sa memorya. Ito ay kritikal para sa malalaking API responses, pag-parse ng RSS feed na may daan-daang elemento, o pagproseso ng array ng libu-libong JSON object mula sa server dump. Streaming parser ay nagbabasa ng token bawat token, kumukonsumo ng constant na dami ng memorya kahit anong laki ng dokumento.

Parsing ng JSON sa mobile apps

JSON — dominanteng format ng data exchange. Sa iOS, ang built-in na JSONSerialization ay nag-parse ng JSON sa Any, at JSONDecoder — direkta sa Codable structure. Sa Android, ang standard na org.json ay nagbibigay ng JSONObject at JSONArray para sa manual analysis. Gson at Moshi ay nagdaragdag ng automatic conversion. Ang pagpili sa pagitan ng manual at automatic approach — unang architectural decision ng network layer.

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")
    // pagproseso ng user
}

Manual parsing sa pamamagitan ng org.json ay kapaki-pakinabang kapag ang structure ng response ay hindi alam beforehand o malaki ang pagkakaiba-iba. Ang approach na ito ay nagbibigay ng buong kontrol sa error handling at nullable fields, ngunit nangangailangan ng mas maraming boilerplate code kumpara sa automatic deserialization. Para sa maliliit na proyekto o prototypes ito ay katanggap-tanggap, ngunit sa production ay inirerekomenda ang Moshi o kotlinx.serialization.

JSONReader para sa streaming analysis

JsonReader mula sa library ng Moshi — makapangyarihang tool para sa streaming JSON parsing. Binabasa ang dokumento token bawat token, gamit ang mga method na beginObject, nextName, nextString, nextInt at endObject. Ang approach na ito ay nagpapahintulot sa pagproseso ng mga dokumento ng anumang laki na may constant memory consumption. Ayon sa Google (2026), ang streaming parsing sa pamamagitan ng JsonReader ay 2–3 beses na mas mabilis kaysa pag-load ng buong dokumento sa JsonObject at kumukonsumo ng hanggang 80% na mas kaunting memorya.

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

Ang halimbawa ay nagpapakita ng JsonReader na nag-parse ng JSON nang streaming. Bawat tawag sa nextName() at nextInt() ay gumagalaw ng cursor sa susunod na token. skipValue() ay lumalaktaw sa hindi kinakailangang field nang hindi ita-parse — ito ay lalong kapaki-pakinabang kapag ang JSON ay naglalaman ng 50 field at 3 lang ang kailangan. Resulta — minimal memory consumption at maximum speed.

Parsing ng XML at CSV

XML ay ginagamit pa rin sa mga Android project para sa resources at sa SOAP services ng corporate applications. Sa Android, ang built-in na XmlPullParser ay nagbibigay ng streaming analysis na may minimal memory consumption — hindi naglo-load ng DOM tree, bagkus gumagawa ng START_TAG, TEXT, END_TAG events. iOS ay gumagamit ng XMLParser na may delegate approach: ang mga method na parser(didStartElement:) at parser(foundCharacters:) ay nagpo-process ng mga element nang sequential.

CSV sa mobile development

CSV — pinakasimpleng format para sa export at import ng tabular data. Sa mga mobile app, CSV ay ginagamit para sa pag-export ng reports, pag-load ng mga direktoryo (listahan ng bansa, pera, code) at synchronize ng offline data. Para sa CSV parsing, ang streaming libraries ay angkop: Apache Commons CSV at OpenCSV ay nagpo-process ng file line by line, nag-e-escape ng quotes at commas sa loob ng values. Sa iOS, CSV parsing ay maaaring gawin sa pamamagitan ng delimiter na NSString.components(separatedBy:) na may handling ng edge cases.

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

Halimbawa ng XMLParser delegate sa iOS para sa pag-parse ng RSS feed. Ang method na didStartElement ay tinatawag sa bawat opening tag, foundCharacters ay nagbabalik ng text content sa pagitan ng tags, didEndElement ay nagtatapos ng elemento. Ang ganitong event-driven architecture ay nagpapahintulot sa pagproseso ng XML ng anumang laki nang hindi nilo-load ang DOM tree sa memorya — kritikal para sa limitadong resources ng mobile devices.

Paghahambing ng CSV libraries para sa Android

Sa Android, ang pagpili ng CSV parser ay depende sa volume ng data. OpenCSV ay sumusuporta sa fluent API, annotations para sa mapping sa POJO at custom separators. Apache Commons CSV — mas mababang level, ngunit mas mabilis sa malalaking file. Para sa simpleng kaso (1–2 column), sapat na ang manual analysis sa pamamagitan ng String.split(",") na may escape handling. Para sa production projects na may malalaking CSV file, inirerekomenda ang OpenCSV.

Protobuf at streaming parsing

Protocol Buffers mula sa Google — binary serialization format, higit sa JSON sa bilis at compactness. Ang Protobuf message ay kumukuha ng 3–6 beses na mas kaunting espasyo kaysa sa katumbas na JSON at na-parse ng 4–10 beses na mas mabilis dahil sa binary format at matibay na schema. Pangunahing disadvantages: kakulangan ng human readability at pangangailangan na gumawa ng code mula sa .proto files sa pamamagitan ng protoc compiler.

Streaming parsing ng Protobuf ay ipinapatupad sa pamamagitan ng CodedInputStream — binabasa ng client ang mga field habang dumarating ang mga ito nang hindi nilo-load ang buong mensahe. Bawat field ay may tag (number + type), at ang parser ay maaaring lumaktaw sa hindi kilalang field. Ayon sa Google (2026), ang streaming analysis ng Protobuf ay kumukonsumo ng hanggang 90% na mas kaunting memorya sa pagproseso ng mga mensahe mula sa 1 MB, na kritikal para sa mobile devices na may limitadong RAM. Protobuf-lite — espesyal na version para sa Android, optimized para sa laki ng generated code.

Mga Madalas Itanong

Ano ang pagkakaiba ng JSONSerialization at JSONDecoder?

JSONSerialization — manual parsing na nagbabalik ng Any (Dictionary, Array) nang walang typification. JSONDecoder — automatic deserialization sa Codable types. JSONSerialization ay nagbibigay ng flexibility para sa dynamic structures, JSONDecoder — bilis at type safety para sa alam na schemas. Sa production ay inirerekomenda ang JSONDecoder.

Kailan gagamitin ang streaming parsing sa halip na i-load ang buong dokumento?

Streaming parsing ay sapilitan para sa mga response mula 500 KB, sa pag-parse ng RSS/Atom feeds at sa pagsusuri ng mga file sa devices na may limitadong memorya. Para sa tipikal na API responses hanggang 100 KB, ang automatic deserialization sa pamamagitan ng JSONDecoder o Moshi ay mas gusto — mas malinis ang code at mas mabilis na-develop.

Anong mga format ng data ang sinusuportahan sa Android SDK nang built-in?

Ang Android SDK ay may kasamang org.json (JSONObject, JSONArray), XmlPullParser (XML) at android.util.JsonReader. Para sa CSV, YAML at Protobuf ay kailangan ng karagdagang libraries: OpenCSV para sa CSV, SnakeYAML para sa YAML, protobuf-javalite para sa Protobuf.

Ano ang gagawin sa hindi wastong JSON mula sa server?

Gamitin ang lenient mode sa kotlinx.serialization o JsonReader.setLenient(true) sa Moshi — pinapatawad ang dagdag na commas, hindi na-escape na quotes at single-line comments. Para sa kumpletong validation, ipatupad ang contract testing sa pamamagitan ng Pact o Spring Cloud Contract.

Ano ang SAX parsing at saan ito inilalapat?

SAX (Simple API for XML) — streaming XML parser na gumagawa ng events na startElement, characters, endElement habang binabagtas ang dokumento. Ipinapatupad sa pamamagitan ng XmlPullParser sa Android at XMLParser sa iOS. Inilalapat sa RSS readers, offline data synchronization at pagproseso ng SVG files.

Buod

  • Parsing — pangunahing operasyon ng pagsusuri ng structured data, mas malawak kaysa deserialization: maaaring streaming at hindi nangangailangan ng typification.
  • JSON — pangunahing format para sa REST API sa mobile development; sinusuportahan ng JSONSerialization (iOS) at org.json (Android).
  • Streaming parsing sa pamamagitan ng JsonReader, XmlPullParser at SAX ay nakakatipid ng memorya at kritikal para sa malalaking dokumento.
  • Protobuf — pinakamabilis at pinaka-compact na format, inirerekomenda para sa high-load at multi-platform systems.
  • XMLPullParser sa Android at XMLParser sa iOS — standard na tool para sa streaming XML parsing na may event model.
  • CSV parsers (OpenCSV, Apache Commons CSV) ay kapaki-pakinabang para sa pag-export ng reports at pag-load ng reference data.
  • Ang pagpili sa pagitan ng manual at automatic parsing ay depende sa laki ng data, pagkakaiba-iba ng schema at memory requirements ng device.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din