Το Parsing — η διαδικασία συντακτικής ανάλυσης δομημένων δεδομένων, που εξάγει πληροφορίες από JSON, XML, CSV ή Protobuf για χρήση στην εφαρμογή. Σύμφωνα με τα δεδομένα Square Engineering (2025), η επιλογή στρατηγικής parsing επηρεάζει άμεσα την απόδοση της εφαρμογής κινητού. Το Streaming parsing επιτρέπει την επεξεργασία megabytes δεδομένων χωρίς φόρτωση ολόκληρου του εγγράφου στη μνήμη.
Κύρια σημεία
Parsing (συντακτική ανάλυση) — η διαδικασία μετατροπής μιας ακολουθίας χαρακτήρων σε δομημένη αναπαράσταση κατάλληλη για προγραμματιστική επεξεργασία. Στο πλαίσιο της ανάπτυξης κινητών, με τον όρο parsing εννοείται η ανάλυση απαντήσεων διακομιστή, αρχείων διαμόρφωσης, τοπικής προσωρινής μνήμης και αρχείων πόρων. Κάθε μορφή απαιτεί τη δική της προσέγγιση: JSON — ελαφρύ και ενσωματωμένο στο SDK, XML — αυστηρό με επικύρωση σχήματος XSD, CSV — μινιμαλιστικό για δεδομένα πίνακα, Protobuf — δυαδικό με άκαμπτο σχήμα.
Οποιοσδήποτε parser, ανεξαρτήτως μορφής, περνά από τρία στάδια. Η λεξική ανάλυση διασπά το ακατέργαστο κείμενο σε λεκτικές μονάδες: κλειδιά, συμβολοσειρές, αριθμούς, διαχωριστικά και σχόλια. Η συντακτική ανάλυση ελέγχει την ορθότητα της γραμματικής — ισορροπία αγκυλών στο JSON, σωστή ένθεση ετικετών στο XML. Η δημιουργία δομής εξόδου σχηματίζει την αντικειμενοστραφή αναπαράσταση: JSONObject, Map, ή ροή λεκτικών μονάδων για περαιτέρω επεξεργασία. Σύμφωνα με τα δεδομένα Apple (2026), ο ενσωματωμένος Foundation parser σε iOS χρησιμοποιεί τεμπέλικη ανάλυση — επικυρώνει μόνο την αρχή του JSON, εξοικονομώντας πόρους.
Χειροκίνητο parsing (JSONSerialization, XmlPullParser) δίνει πλήρη έλεγχο στη διαδικασία και είναι χρήσιμο σε μη τυπικές μορφές ή όταν απαιτείται προσαρμοσμένη επικύρωση κάθε πεδίου. Αυτόματες βιβλιοθήκες (JSONDecoder, Moshi, kotlinx.serialization) επιταχύνουν την ανάπτυξη, αλλά κρύβουν λεπτομέρειες διαχείρισης σφαλμάτων. Η επιλογή εξαρτάται από τις απαιτήσεις: αν η δομή δεδομένων είναι δυναμική ή άγνωστη εκ των προτέρων — το χειροκίνητο parsing είναι προτιμότερο. Αν το σχήμα είναι σταθερό — η αυτόματη αποσειροποίηση μειώνει τον κώδικα κατά 60-70%.
Parsing — ευρύτερη λειτουργία: μπορεί να εκτελείται ροϊκά και δεν δημιουργεί απαραίτητα τυποποιημένο αντικείμενο. Αποσειροποίηση — ειδική περίπτωση parsing, με αποτέλεσμα πάντα ένα στιγμιότυπο προκαθορισμένης κλάσης με συγκεκριμένους τύπους ιδιοτήτων. Ένας parser JSON αναλύει το έγγραφο σε Map ή JsonElement, ενώ ένας αποσειροποιητής μετατρέπει το ίδιο JSON σε συγκεκριμένο αντικείμενο User, Order ή Product με γνωστά πεδία και τύπους.
| Χαρακτηριστικό | Parsing | Αποσειροποίηση |
|---|---|---|
| Αποτέλεσμα | JsonElement, Map, ροή λεκτικών μονάδων | Τυποποιημένο αντικείμενο (User, Order) |
| Ροϊκή λειτουργία | Ναι (SAX, JsonReader) | Όχι (όλο το αντικείμενο στη μνήμη) |
| Τυποποίηση | Προαιρετική, δυναμικοί τύποι | Υποχρεωτική, στατικοί τύποι |
| Παράδειγμα | XmlPullParser.next(), SAX events | json.decodeFromString<User>() |
Streaming parsing — το κύριο πλεονέκτημα του parsing έναντι της αποσειροποίησης. Το XmlPullParser στο Android αναλύει XML καθώς διαβάζει, χωρίς να φορτώνει ολόκληρο το έγγραφο στη μνήμη RAM. Αυτό είναι κρίσιμο για μεγάλες απαντήσεις API, ανάλυση RSS ροών με εκατοντάδες στοιχεία ή επεξεργασία πίνακα από χιλιάδες αντικείμενα JSON από server dump. Ο streaming parser διαβάζει λεκτική μονάδα προς λεκτική μονάδα, καταναλώνοντας σταθερή ποσότητα μνήμης ανεξάρτητα από το μέγεθος του εγγράφου.
JSON — η κυρίαρχη μορφή ανταλλαγής δεδομένων. Σε iOS το ενσωματωμένο JSONSerialization αναλύει JSON σε Any, ενώ το JSONDecoder — απευθείας σε Codable δομή. Σε Android το τυπικό org.json παρέχει JSONObject και JSONArray για χειροκίνητη ανάλυση. Τα Gson και Moshi προσθέτουν αυτόματη μετατροπή. Η επιλογή μεταξύ χειροκίνητης και αυτόματης προσέγγισης είναι η πρώτη αρχιτεκτονική απόφαση του δικτυακού επιπέδου.
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 πεδίων, αλλά απαιτεί περισσότερο πρότυπο κώδικα σε σύγκριση με την αυτόματη αποσειροποίηση. Για μικρά έργα ή πρωτότυπα είναι αποδεκτό, αλλά σε production προτιμώνται Moshi ή kotlinx.serialization.
JsonReader από τη βιβλιοθήκη Moshi — ισχυρό εργαλείο streaming parsing JSON. Διαβάζει το έγγραφο λεκτική μονάδα προς λεκτική μονάδα, χρησιμοποιώντας μεθόδους beginObject, nextName, nextString, nextInt και endObject. Αυτή η προσέγγιση επιτρέπει την επεξεργασία εγγράφων οποιουδήποτε μεγέθους με σταθερή κατανάλωση μνήμης. Σύμφωνα με τα δεδομένα Google (2026), το streaming parsing μέσω JsonReader είναι 2-3 φορές ταχύτερο από τη φόρτωση ολόκληρου του εγγράφου σε JsonObject και καταναλώνει έως 80% λιγότερη μνήμη.
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. Αποτέλεσμα — ελάχιστη κατανάλωση μνήμης και μέγιστη ταχύτητα.
XML συνεχίζει να χρησιμοποιείται σε Android έργα για πόρους και σε SOAP υπηρεσίες εταιρικών εφαρμογών. Σε Android το ενσωματωμένο XmlPullParser εξασφαλίζει ροϊκή ανάλυση με ελάχιστη κατανάλωση μνήμης — δεν φορτώνει DOM δέντρο, αλλά παράγει συμβάντα START_TAG, TEXT, END_TAG. Το iOS χρησιμοποιεί XMLParser με προσέγγιση αντιπροσώπου: οι μέθοδοι parser(didStartElement:) και parser(foundCharacters:) επεξεργάζονται στοιχεία διαδοχικά.
CSV — η απλούστερη μορφή για εξαγωγή και εισαγωγή δεδομένων πίνακα. Σε εφαρμογές κινητών, το CSV χρησιμοποιείται για εξαγωγή αναφορών, φόρτωση βιβλίων αναφοράς (λίστες χωρών, νομισμάτων, κωδικών) και συγχρονισμό offline δεδομένων. Για parsing CSV είναι κατάλληλες streaming βιβλιοθήκες: Apache Commons CSV και OpenCSV επεξεργάζονται αρχεία γραμμή προς γραμμή, διαφεύγοντας εισαγωγικά και κόμματα εντός τιμών. Σε iOS, το CSV parsing μπορεί να υλοποιηθεί μέσω delimiter NSString.components(separatedBy:) με επεξεργασία οριακών περιπτώσεων.
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 δέντρου στη μνήμη — κρίσιμο για περιορισμένους πόρους κινητών συσκευών.
Σε Android, η επιλογή CSV parser εξαρτάται από τον όγκο δεδομένων. OpenCSV υποστηρίζει fluent API, σχολιασμούς για αντιστοίχιση σε POJO και προσαρμοσμένους διαχωριστές. Apache Commons CSV — πιο χαμηλού επιπέδου, αλλά ταχύτερο σε μεγάλα αρχεία. Για απλές περιπτώσεις (1-2 στήλες) αρκεί η χειροκίνητη ανάλυση μέσω String.split(",") με επεξεργασία διαφυγής. Για production έργα με μεγάλα CSV αρχεία, συνιστάται OpenCSV.
Protocol Buffers από την Google — δυαδική μορφή σειροποίησης, που υπερέχει του JSON σε ταχύτητα και συμπαγότητα. Ένα μήνυμα Protobuf καταλαμβάνει 3-6 φορές λιγότερο χώρο από το ισοδύναμο JSON και αναλύεται 4-10 φορές ταχύτερα χάρη στη δυαδική μορφή και το άκαμπτο σχήμα. Κύρια μειονεκτήματα: απουσία αναγνωσιμότητας από άνθρωπο και ανάγκη δημιουργίας κώδικα από .proto αρχεία μέσω protoc μεταγλωττιστή.
Streaming parsing Protobuf υλοποιείται μέσω CodedInputStream — ο πελάτης διαβάζει πεδία καθώς φτάνουν χωρίς φόρτωση ολόκληρου του μηνύματος. Κάθε πεδίο έχει tag (αριθμός + τύπος) και ο parser μπορεί να παραλείπει άγνωστα πεδία. Σύμφωνα με τα δεδομένα Google (2026), η ροϊκή ανάλυση Protobuf καταναλώνει έως 90% λιγότερη μνήμη κατά την επεξεργασία μηνυμάτων από 1 MB, που είναι κρίσιμο για κινητές συσκευές με περιορισμένη μνήμη RAM. Το Protobuf-lite — ειδική έκδοση για Android, βελτιστοποιημένη ως προς το μέγεθος του παραγόμενου κώδικα.
Συχνές ερωτήσεις
JSONSerialization — χειροκίνητο parsing, που επιστρέφει Any (Dictionary, Array) χωρίς τυποποίηση. JSONDecoder — αυτόματη αποσειροποίηση σε Codable τύπους. Το JSONSerialisation δίνει ευελιξία για δυναμικές δομές, το JSONDecoder — ταχύτητα και ασφάλεια τύπων για γνωστά σχήματα. Σε production συνιστάται το JSONDecoder.
Το streaming parsing είναι υποχρεωτικό για απαντήσεις από 500 KB, κατά την ανάλυση RSS/Atom ροών και κατά την επεξεργασία αρχείων σε συσκευές με περιορισμένη μνήμη. Για τυπικές απαντήσεις API έως 100 KB, η αυτόματη αποσειροποίηση μέσω JSONDecoder ή Moshi είναι προτιμότερη — ο κώδικας είναι πιο καθαρός και αναπτύσσεται ταχύτερα.
Το Android SDK περιλαμβάνει org.json (JSONObject, JSONArray), XmlPullParser (XML) και android.util.JsonReader. Για CSV, YAML και Protobuf απαιτούνται πρόσθετες βιβλιοθήκες: OpenCSV για CSV, SnakeYAML για YAML, protobuf-javalite για Protobuf.
Χρησιμοποιήστε lenient λειτουργία στο kotlinx.serialization ή JsonReader.setLenient(true) στο Moshi — ανέχεται επιπλέον κόμματα, μη διαφευγόμενα εισαγωγικά και μονόγραμμα σχόλια. Για πλήρη επικύρωση, εφαρμόστε συμβατικό έλεγχο μέσω Pact ή Spring Cloud Contract.
SAX (Simple API for XML) — streaming XML parser, που παράγει συμβάντα startElement, characters, endElement κατά την περιήγηση του εγγράφου. Υλοποιείται μέσω XmlPullParser σε Android και XMLParser σε iOS. Χρησιμοποιείται σε RSS αναγνώστες, συγχρονισμό offline δεδομένων και επεξεργασία SVG αρχείων.
Συμπεράσματα
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης