El parsing es el proceso de análisis sintáctico de datos estructurados, que extrae información de JSON, XML, CSV o Protobuf para su uso en una aplicación. Según Square Engineering (2025), la elección de la estrategia de parsing afecta directamente el rendimiento de la aplicación móvil. El parsing en streaming permite procesar megabytes de datos sin cargar el documento completo en memoria.
Puntos clave
Parsing (análisis sintáctico) es el proceso de convertir una secuencia de caracteres en una representación estructurada adecuada para el procesamiento programático. En el contexto del desarrollo móvil, el parsing se refiere al procesamiento de respuestas del servidor, archivos de configuración, caché local y archivos de recursos. Cada formato requiere su propio enfoque: JSON — ligero e integrado en el SDK, XML — estricto con validación de esquema XSD, CSV — minimalista para datos tabulares, Protobuf — binario con un esquema rígido.
Cualquier parser, independientemente del formato, pasa por tres etapas. El análisis léxico divide el texto bruto en tokens: claves, cadenas, números, delimitadores y comentarios. El análisis sintáctico verifica la corrección gramatical — equilibrio de corchetes en JSON, anidación correcta de etiquetas en XML. La construcción de la estructura de salida produce una representación de objeto: JSONObject, Map o un flujo de tokens para su posterior procesamiento. Según Apple (2026), el parser integrado de Foundation en iOS utiliza análisis diferido — solo valida el inicio del JSON, ahorrando recursos.
El parsing manual (JSONSerialization, XmlPullParser) brinda control total sobre el proceso y es útil para formatos no estándar o cuando se necesita validación personalizada de cada campo. Las bibliotecas automatizadas (JSONDecoder, Moshi, kotlinx.serialization) aceleran el desarrollo pero ocultan los detalles del manejo de errores. La elección depende de los requisitos: si la estructura de datos es dinámica o desconocida de antemano, el parsing manual es preferible. Si el esquema es fijo, la deserialización automatizada reduce el código en un 60-70%.
El parsing es una operación más amplia: se puede realizar en modo streaming y no necesariamente crea un objeto tipado. La deserialización es un caso específico de parsing cuyo resultado es siempre una instancia de una clase conocida con tipos de propiedades concretos. Un parser JSON descompone un documento en un Map o JsonElement, mientras que un deserializador convierte el mismo JSON en un objeto User, Order o Product con campos y tipos conocidos.
| Característica | Parsing | Deserialización |
|---|---|---|
| Resultado | JsonElement, Map, flujo de tokens | Objeto tipado (User, Order) |
| Modo streaming | Sí (SAX, JsonReader) | No (objeto completo en memoria) |
| Tipificación | Opcional, tipos dinámicos | Obligatoria, tipos estáticos |
| Ejemplo | XmlPullParser.next(), eventos SAX | json.decodeFromString<User>() |
El parsing en streaming es la principal ventaja del parsing sobre la deserialización. XmlPullParser en Android analiza XML a medida que lo lee, sin cargar todo el documento en RAM. Esto es crítico para respuestas grandes de API, análisis de fuentes RSS con cientos de elementos o procesamiento de matrices de miles de objetos JSON desde un volcado del servidor. Un parser en streaming lee token por token, consumiendo una cantidad constante de memoria independientemente del tamaño del documento.
JSON es el formato dominante de intercambio de datos. En iOS, el JSONSerialization integrado analiza JSON en Any, mientras que JSONDecoder lo hace directamente en una estructura Codable. En Android, el org.json estándar proporciona JSONObject y JSONArray para análisis manual. Gson y Moshi añaden conversión automática. Elegir entre enfoques manuales y automatizados es la primera decisión arquitectónica de la capa de red.
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")
// procesamiento de usuario
}
Parsing manual mediante org.json es útil cuando la estructura de la respuesta se desconoce de antemano o varía mucho. Este enfoque brinda control total sobre el manejo de errores y campos anulables, pero requiere más código repetitivo en comparación con la deserialización automatizada. Para proyectos pequeños o prototipos es aceptable, pero en producción se prefiere Moshi o kotlinx.serialization.
JsonReader de la biblioteca Moshi es una herramienta potente para el parsing JSON en streaming. Lee el documento token por token utilizando métodos como beginObject, nextName, nextString, nextInt y endObject. Este enfoque permite procesar documentos de cualquier tamaño con un consumo de memoria constante. Según Google (2026), el parsing en streaming mediante JsonReader es 2-3 veces más rápido que cargar todo el documento en un JsonObject y consume hasta un 80% menos de memoria.
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()
El ejemplo muestra JsonReader analizando JSON en modo streaming. Cada llamada a nextName() y nextInt() avanza el cursor al siguiente token. skipValue() omite campos innecesarios sin analizarlos — especialmente útil cuando JSON contiene 50 campos pero solo se necesitan 3. El resultado es un consumo mínimo de memoria y máxima velocidad.
XML continúa utilizándose en proyectos Android para recursos y en servicios SOAP de aplicaciones empresariales. En Android, el XmlPullParser integrado proporciona análisis en streaming con consumo mínimo de memoria — no carga un árbol DOM sino que genera eventos START_TAG, TEXT, END_TAG. iOS utiliza XMLParser con un enfoque de delegado: los métodos parser(didStartElement:) y parser(foundCharacters:) manejan los elementos secuencialmente.
CSV es el formato más simple para exportar e importar datos tabulares. En aplicaciones móviles, CSV se utiliza para exportación de informes, carga de datos de referencia (listas de países, monedas, códigos) y sincronización de datos sin conexión. Las bibliotecas de streaming son adecuadas para el parsing CSV: Apache Commons CSV y OpenCSV procesan archivos línea por línea, escapando comillas y comas dentro de los valores. En iOS, el parsing CSV se puede implementar mediante el método de delimitador NSString.components(separatedBy:) con manejo de casos extremos.
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
}
}
Ejemplo de un delegado XMLParser en iOS para analizar una fuente RSS. El método didStartElement se llama en cada etiqueta de apertura, foundCharacters devuelve el contenido textual entre etiquetas y didEndElement completa el elemento. Esta arquitectura basada en eventos permite procesar XML de cualquier tamaño sin cargar un árbol DOM en memoria — crítico para recursos limitados en dispositivos móviles.
En Android, la elección del parser CSV depende del volumen de datos. OpenCSV admite una API fluida, anotaciones para mapeo POJO y delimitadores personalizados. Apache Commons CSV es de más bajo nivel pero más rápido en archivos grandes. Para casos simples (1-2 columnas), es suficiente el análisis manual mediante String.split(",") con manejo de escapes. Para proyectos de producción con archivos CSV grandes, se recomienda OpenCSV.
Protocol Buffers de Google es un formato de serialización binario que supera a JSON en velocidad y compacidad. Un mensaje Protobuf ocupa 3-6 veces menos espacio que el JSON equivalente y se analiza 4-10 veces más rápido gracias a su formato binario y esquema rígido. Los principales inconvenientes son la falta de legibilidad humana y la necesidad de generar código a partir de archivos .proto mediante el compilador protoc.
Parsing en streaming de Protobuf se implementa mediante CodedInputStream — el cliente lee los campos a medida que llegan sin cargar todo el mensaje. Cada campo tiene una etiqueta (número + tipo) y el parser puede saltar campos desconocidos. Según Google (2026), el parsing en streaming de Protobuf consume hasta un 90% menos de memoria al procesar mensajes desde 1 MB, lo cual es crítico para dispositivos móviles con RAM limitada. Protobuf-lite es una versión especial para Android, optimizada en tamaño de código generado.
Preguntas frecuentes
JSONSerialization es un parsing manual que devuelve Any (Dictionary, Array) sin tipificación. JSONDecoder es una deserialización automática en tipos Codable. JSONSerialization proporciona flexibilidad para estructuras dinámicas, mientras que JSONDecoder ofrece velocidad y seguridad de tipos para esquemas conocidos. En producción, se recomienda JSONDecoder.
El parsing en streaming es obligatorio para respuestas de más de 500 KB, al analizar fuentes RSS/Atom y al procesar archivos en dispositivos con memoria limitada. Para respuestas API típicas de hasta 100 KB, la deserialización automática mediante JSONDecoder o Moshi es preferible — código más limpio y desarrollo más rápido.
Android SDK incluye org.json (JSONObject, JSONArray), XmlPullParser (XML) y android.util.JsonReader. CSV, YAML y Protobuf requieren bibliotecas adicionales: OpenCSV para CSV, SnakeYAML para YAML, protobuf-javalite para Protobuf.
Use el modo lenient en kotlinx.serialization o JsonReader.setLenient(true) en Moshi — perdona comas finales, comillas no escapadas y comentarios de una línea. Para validación completa, implemente pruebas de contrato mediante Pact o Spring Cloud Contract.
SAX (Simple API for XML) es un parser XML en streaming que genera eventos startElement, characters, endElement al recorrer el documento. Se implementa mediante XmlPullParser en Android y XMLParser en iOS. Se utiliza en lectores RSS, sincronización de datos sin conexión y procesamiento de archivos SVG.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también