पार्सिंग संरचित डेटा के वाक्यात्मक विश्लेषण की प्रक्रिया है, जो JSON, XML, CSV या Protobuf से जानकारी निकालकर एप्लिकेशन में उपयोग करती है। Square Engineering (2025) के अनुसार, पार्सिंग रणनीति का चुनाव सीधे मोबाइल एप्लिकेशन के प्रदर्शन को प्रभावित करता है। स्ट्रीमिंग पार्सिंग पूरे दस्तावेज़ को मेमोरी में लोड किए बिना मेगाबाइट डेटा प्रोसेस करने की अनुमति देता है।
मुख्य निष्कर्ष
पार्सिंग (वाक्यात्मक विश्लेषण) अक्षरों के अनुक्रम को प्रोग्रामेटिक प्रोसेसिंग के लिए उपयुक्त संरचित प्रतिनिधित्व में बदलने की प्रक्रिया है। मोबाइल डेवलपमेंट के संदर्भ में, पार्सिंग का तात्पर्य सर्वर प्रतिक्रियाओं, कॉन्फ़िगरेशन फ़ाइलों, स्थानीय कैश और संसाधन फ़ाइलों को प्रोसेस करना है। प्रत्येक प्रारूप को अपने दृष्टिकोण की आवश्यकता होती है: JSON — हल्का और SDK में निर्मित, XML — XSD स्कीमा सत्यापन के साथ सख्त, CSV — सारणीबद्ध डेटा के लिए न्यूनतम, Protobuf — कठोर स्कीमा के साथ बाइनरी।
कोई भी पार्सर, प्रारूप की परवाह किए बिना, तीन चरणों से गुज़रता है। शाब्दिक विश्लेषण कच्चे टेक्स्ट को टोकन में विभाजित करता है: कुंजियाँ, स्ट्रिंग्स, संख्याएँ, विभाजक और टिप्पणियाँ। वाक्यात्मक विश्लेषण व्याकरण की शुद्धता की जाँच करता है — JSON में कोष्ठक संतुलन, XML में टैग नेस्टिंग की सहीता। आउटपुट संरचना निर्माण एक ऑब्जेक्ट प्रतिनिधित्व बनाता है: JSONObject, Map, या आगे की प्रक्रिया के लिए टोकन स्ट्रीम। Apple (2026) के अनुसार, iOS पर निर्मित Foundation पार्सर आलसी पार्सिंग का उपयोग करता है — यह केवल JSON की शुरुआत को मान्य करता है, संसाधन बचाता है।
मैनुअल पार्सिंग (JSONSerialization, XmlPullParser) प्रक्रिया पर पूर्ण नियंत्रण देता है और गैर-मानक प्रारूपों या प्रत्येक फ़ील्ड के कस्टम सत्यापन की आवश्यकता होने पर उपयोगी है। स्वचालित लाइब्रेरी (JSONDecoder, Moshi, kotlinx.serialization) डेवलपमेंट को गति देती हैं लेकिन त्रुटि प्रबंधन विवरण छिपाती हैं। चुनाव आवश्यकताओं पर निर्भर करता है: यदि डेटा संरचना गतिशील या पहले से अज्ञात है — मैनुअल पार्सिंग बेहतर है। यदि स्कीमा निश्चित है — स्वचालित डीसीरियलाइज़ेशन कोड को 60-70% तक कम करता है।
पार्सिंग एक व्यापक संक्रिया है: इसे स्ट्रीमिंग तरीके से किया जा सकता है और यह अनिवार्य रूप से टाइप किया गया ऑब्जेक्ट नहीं बनाता। डीसीरियलाइज़ेशन पार्सिंग का एक विशिष्ट मामला है जिसका परिणाम हमेशा विशिष्ट गुण प्रकारों वाले ज्ञात वर्ग का एक उदाहरण होता है। JSON पार्सर दस्तावेज़ को Map या JsonElement में तोड़ता है, जबकि डीसीरियलाइज़र उसी JSON को ज्ञात फ़ील्ड और उनके प्रकारों वाली User, Order या Product ऑब्जेक्ट में बदलता है।
| विशेषता | पार्सिंग | डीसीरियलाइज़ेशन |
|---|---|---|
| परिणाम | JsonElement, Map, टोकन स्ट्रीम | टाइप की गई ऑब्जेक्ट (User, Order) |
| स्ट्रीमिंग मोड | हाँ (SAX, JsonReader) | नहीं (पूरी ऑब्जेक्ट मेमोरी में) |
| टाइपिंग | वैकल्पिक, गतिशील प्रकार | अनिवार्य, स्थिर प्रकार |
| उदाहरण | XmlPullParser.next(), SAX इवेंट | json.decodeFromString<User>() |
स्ट्रीमिंग पार्सिंग डीसीरियलाइज़ेशन पर पार्सिंग का मुख्य लाभ है। Android पर XmlPullParser XML को पढ़ते ही पार्स करता है, पूरे दस्तावेज़ को RAM में लोड किए बिना। यह बड़े API रिस्पॉन्स, सैकड़ों आइटम वाली RSS फ़ीड पार्स करने, या सर्वर डंप से हजारों JSON ऑब्जेक्ट की सरणी प्रोसेस करने के लिए महत्वपूर्ण है। स्ट्रीमिंग पार्सर टोकन दर टोकन पढ़ता है, दस्तावेज़ के आकार की परवाह किए बिना स्थिर मेमोरी खपत करता है।
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")
// उपयोगकर्ता प्रोसेसिंग
}
org.json के माध्यम से मैनुअल पार्सिंग उपयोगी है जब प्रतिक्रिया संरचना पहले से अज्ञात हो या बहुत भिन्न हो। यह दृष्टिकोण त्रुटि प्रबंधन और नल-योग्य फ़ील्ड पर पूर्ण नियंत्रण देता है लेकिन स्वचालित डीसीरियलाइज़ेशन की तुलना में अधिक बॉयलरप्लेट कोड की आवश्यकता होती है। छोटी परियोजनाओं या प्रोटोटाइप के लिए यह स्वीकार्य है, लेकिन उत्पादन में Moshi या kotlinx.serialization पसंद किया जाता है।
JsonReader Moshi लाइब्रेरी से स्ट्रीमिंग JSON पार्सिंग के लिए एक शक्तिशाली उपकरण है। यह beginObject, nextName, nextString, nextInt और endObject विधियों का उपयोग करके दस्तावेज़ को टोकन दर टोकन पढ़ता है। यह दृष्टिकोण स्थिर मेमोरी खपत के साथ किसी भी आकार के दस्तावेज़ों को प्रोसेस करने की अनुमति देता है। Google (2026) के अनुसार, JsonReader के माध्यम से स्ट्रीमिंग पार्सिंग पूरे दस्तावेज़ को JsonObject में लोड करने की तुलना में 2-3 गुना तेज़ है और 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 का उपयोग रिपोर्ट निर्यात, संदर्भ डेटा (देश सूचियाँ, मुद्राएँ, कोड) लोड करने और ऑफ़लाइन डेटा सिंक्रनाइज़ेशन के लिए किया जाता है। CSV पार्सिंग के लिए स्ट्रीमिंग लाइब्रेरी उपयुक्त हैं: Apache Commons CSV और OpenCSV फ़ाइलों को पंक्ति दर पंक्ति प्रोसेस करती हैं, मानों के भीतर उद्धरण और अल्पविराम को एस्केप करती हैं। iOS पर, CSV पार्सिंग को 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
}
}
RSS फ़ीड पार्स करने के लिए iOS पर XMLParser डेलीगेट का उदाहरण। didStartElement विधि प्रत्येक खुलने वाले टैग पर कॉल की जाती है, foundCharacters टैग के बीच टेक्स्ट सामग्री लौटाता है, didEndElement तत्व को पूरा करता है। यह इवेंट-आधारित आर्किटेक्चर DOM ट्री को मेमोरी में लोड किए बिना किसी भी आकार के XML को प्रोसेस करने की अनुमति देता है — मोबाइल उपकरणों के सीमित संसाधनों के लिए महत्वपूर्ण।
Android पर, CSV पार्सर का चुनाव डेटा मात्रा पर निर्भर करता है। OpenCSV एक फ्लुएंट API, POJO मैपिंग के लिए एनोटेशन और कस्टम डिलीमीटर का समर्थन करता है। Apache Commons CSV अधिक निम्न-स्तरीय है लेकिन बड़ी फ़ाइलों पर तेज़ है। सरल मामलों (1-2 कॉलम) के लिए, एस्केप हैंडलिंग के साथ String.split(",") के माध्यम से मैनुअल पार्सिंग पर्याप्त है। बड़ी CSV फ़ाइलों वाली उत्पादन परियोजनाओं के लिए, OpenCSV अनुशंसित है।
Google का Protocol Buffers एक बाइनरी सीरियलाइज़ेशन प्रारूप है जो गति और संक्षिप्तता में JSON से बेहतर है। एक Protobuf संदेश समतुल्य JSON की तुलना में 3-6 गुना कम स्थान लेता है और अपने बाइनरी प्रारूप और कठोर स्कीमा के कारण 4-10 गुना तेज़ी से पार्स होता है। मुख्य कमियाँ मानव-पठनीयता की कमी और protoc कंपाइलर के माध्यम से .proto फ़ाइलों से कोड जनरेट करने की आवश्यकता है।
स्ट्रीमिंग Protobuf पार्सिंग CodedInputStream के माध्यम से कार्यान्वित की जाती है — क्लाइंट पूरे संदेश को लोड किए बिना आने वाले फ़ील्ड को पढ़ता है। प्रत्येक फ़ील्ड में एक टैग (संख्या + प्रकार) होता है, और पार्सर अज्ञात फ़ील्ड छोड़ सकता है। Google (2026) के अनुसार, स्ट्रीमिंग Protobuf पार्सिंग 1 MB से संदेशों को प्रोसेस करते समय 90% तक कम मेमोरी खपत करती है, जो सीमित RAM वाले मोबाइल उपकरणों के लिए महत्वपूर्ण है। Protobuf-lite Android के लिए एक विशेष संस्करण है, जो जनरेट किए गए कोड आकार के लिए अनुकूलित है।
अक्सर पूछे जाने वाले प्रश्न
JSONSerialization मैनुअल पार्सिंग है जो बिना टाइपिंग के Any (Dictionary, Array) लौटाता है। JSONDecoder Codable प्रकारों में स्वचालित डीसीरियलाइज़ेशन है। JSONSerialization गतिशील संरचनाओं के लिए लचीलापन प्रदान करता है, जबकि JSONDecoder ज्ञात स्कीमा के लिए गति और प्रकार सुरक्षा प्रदान करता है। उत्पादन में, JSONDecoder अनुशंसित है।
500 KB से अधिक की प्रतिक्रियाओं के लिए, RSS/Atom फ़ीड पार्स करते समय, और सीमित मेमोरी वाले उपकरणों पर फ़ाइलें प्रोसेस करते समय स्ट्रीमिंग पार्सिंग अनिवार्य है। 100 KB तक के सामान्य API रिस्पॉन्स के लिए, JSONDecoder या Moshi के माध्यम से स्वचालित डीसीरियलाइज़ेशन बेहतर है — साफ़ कोड और तेज़ डेवलपमेंट।
Android SDK में org.json (JSONObject, JSONArray), XmlPullParser (XML), और android.util.JsonReader शामिल हैं। CSV, YAML और Protobuf के लिए अतिरिक्त लाइब्रेरी की आवश्यकता है: CSV के लिए OpenCSV, YAML के लिए SnakeYAML, Protobuf के लिए protobuf-javalite।
kotlinx.serialization में lenient मोड या Moshi में JsonReader.setLenient(true) का उपयोग करें — यह अतिरिक्त अल्पविराम, अनएस्केप्ड उद्धरण और एकल-पंक्ति टिप्पणियों को माफ करता है। पूर्ण सत्यापन के लिए, Pact या Spring Cloud Contract के माध्यम से कॉन्ट्रैक्ट परीक्षण लागू करें।
SAX (Simple API for XML) एक स्ट्रीमिंग XML पार्सर है जो दस्तावेज़ को पार करते समय startElement, characters, endElement इवेंट उत्पन्न करता है। यह Android पर XmlPullParser और iOS पर XMLParser के माध्यम से कार्यान्वित किया जाता है। इसका उपयोग RSS रीडर, ऑफ़लाइन डेटा सिंक्रनाइज़ेशन और SVG फ़ाइल प्रोसेसिंग में किया जाता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें