پارسنگ ساختہ ڈیٹا کے نحوی تجزیے کا عمل ہے، جو 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 کو ترجیح دی جاتی ہے۔
Moshi لائبریری کا JsonReader اسٹریمنگ 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں