JSONSerialization: یہ کیا ہے، Foundation کلاس کے طریقے اور یہ کیسے کام کرتا ہے

مصنف: IT Sectr اشاعت: 2026-03-15 مطالعے کا وقت: 8 منٹ

JSONSerialization — Foundation فریم ورک کا ایک بیلٹ ان iOS کلاس ہے جو JSON کو Foundation آبجیکٹس میں تبدیل کرنے اور واپس کرنے کے لیے ڈیزائن کیا گیا ہے۔ یہ API تیسری پارٹی لائبریریوں کے بغیر Apple پلیٹ فارمز پر JSON کے ساتھ کام کرنے کا بنیادی میکانزم ہے، جو ڈکشنری، ارے اوظار اور پریمٹو ٹائپس کے پارسنگ کی حمایت کرتا ہے۔ Apple Developer, 2024 کے مطابق، JSONSerialization لچیلدار JSON ڈیٹا پروسیسنگ کے لیے Data، سٹریمز اور پڑھنے کے اختیارات کے ساتھ کام کرنے کی حمایت کرتا ہے۔

اہم نکات

  • JSONSerialization — iOS اور macOS پر JSON پارس کرنے کا ایک بیلٹ ان Foundation کلاس
  • jsonObject — JSON Data کو Foundation ڈکشنریوں اور ارے میں تبدیل کرنے کا طریقہ
  • data — Foundation آبجیکٹس کو واپس JSON Data میں سیریلائز کرنے کا طریقہ
  • isValidJSONObject — چک کرنا کہ آبجیکٹ JSON میں سیریلائز کیا جا سکتا ہے یا نہیں
  • Codable — Swift میں ٹائپ شدہ سیریلائزیشن کا جدید متبادل

JSONSerialization کیا ہے

JSONSerialization Foundation فریم ورک کا ایک کلاس ہے جو iOS، macOS، tvOS اور watchOS پر دستیاب ہے۔ یہ JSON Data کو Foundation آبجیکٹس (NSDictionary، NSArray، NSString، NSNumber) میں تبدیل کرنے اور واپس کرنے کے طریقے فراہم کرتا ہے۔ یہ کلاس iOS 5 میں ظاہر ہوا اور Codable (Swift 4) کے متاعرف تک Apple پلیٹ فارمز پر JSON کے ساتھ کام کا بنیادی طریقہ رہا۔ عمر کے باوجود، JSONSerialization لگیسی Objective-C مناصبوں اور ان صورت حالوں میں متعلق رہتا ہے جہاں مقررہ موڈل اسکیما کے بغیر ڈائنامیک JSON پروسیسنگ کی ضرورت ہی۔

JSONSerialization کب استعمال ہوتا ہے

Codable کے آنے کے باوجود، JSONSerialization کئی صورت حالوں میں متعلق رہتا ہے۔ ڈائنامیک JSON ساخت — جب جواب کا فارمیٹ بدلتا ہے یا پہلے سے معلوم نہیں ہوتا — کلیوں کے ذریعے ڈکشنریوں تک رسائی کی ضرورت ہوتی ہے، جو JSONSerialization کے ذریعے کرنا آسان ہے۔ یہ کلاس Objective-C مناصبوں میں بھی استعمال ہوتا ہے جہاں Codable دستیاب نہیں ہے، اور بڑی JSON فائلوں کے تدریجی پارسنگ کے لیے سٹریمز کے ساتھ کام کرتے هوئے۔ ٹیسٹوں اور مک آپ میں، isValidJSONObject اور data(withJSONObject:options:) تیسری پارٹی لائبریریوں کے بغیر تیزی سے JSON فکسچرز تیار کرنے کی اجازت دیتے ہیں، جس سے ڈیویلپمنٹ اور پروٹوٹائپنگ میں تیزی آتی ہے۔

swift
import Foundation

// JSONSerialization کے استعمال کی بنیادی ساخت
let jsonString = """
{
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com"
}
"""

guard let jsonData = jsonString.data(using: .utf8) else {
    return
}

do {
    let json = try JSONSerialization
        .jsonObject(with: jsonData,
                       options: .mutableContainers)
    print(json)
} catch {
    print("JSON پارس غلطی: \(error)")
}

کلاس کے اہم طریقے

JSONSerialization JSON کے ساتھ کام کرنے کے لیے چار اہم طریقے فراہم کرتا ہے۔ اہم طریقہ jsonObject(with:options:) ہے جو Data کو Foundation آبجیکٹس میں تبدیل کرتا ہے۔ data(withJSONObject:options:) طریقہ الٹ سیریلائزیشن کرتا ہے۔ isValidJSONObject(_:) چک کرتا ہے کہ آبجیکٹ سیریلائز کیا جا سکتا ہے یا نہیں۔ writeJSONObject(_:to:options:error:) سیدھا سٹریم میں JSON لکھتا ہے۔ InputStream سے JSON پڑھنے کے لیے، jsonObject(with:options:) طریقہ موجود ہے جو Data کے بجائے سٹریم قبول کرتا ہے، جو سٹریمنگ ڈیٹا واپس کرنے والی نیٹ ورک درخواستوں کے ساتھ انضمام کرتے وقت آسان ہے۔

JSONObject اور JSONData

jsonObject طریقہ Data قبول کرتا ہے اور Any — عموماً NSDictionary یا NSArray — واپس کرتا ہے۔ محفوظ استعمال کے لیے، نتیجہ مشروط کاسٹنگ کے ذریعے متوقعہ ٹائپ میں تبدیل کیا جاتا ہے۔ data طریقہ ایک Foundation آبجیکٹ قبول کرتا ہے اور JSON نمائندگی کے ساتھ Data واپس کرتا ہے۔ .prettyPrinted اختیار پڑھنے کی آسانی کے لیے حاشیہ کے ساتھ فارمیٹنگ شامل کرتا ہے۔

swift
let jsonString = """
{
    "products": [
        {"id": 1, "name": "iPhone", "price": 999},
        {"id": 2, "name": "iPad", "price": 799}
    ]
}
"""
let data = Data(jsonString.utf8)

if let json = try? JSONSerialization
    .jsonObject(with: data) as? [String: Any],
    let products = json["products"] as? [[String: Any]] {

    for product in products {
        if let name = product["name"] as? String {
            print("مصنوع: \(name)")
        }
    }
}

// الٹ سیریلائزیشن: آبجیکٹ -> JSON
let outputDict: [String: Any] = ["status": "ok", "count": 42]
if let outputData = try? JSONSerialization
    .data(withJSONObject: outputDict,
                options: .prettyPrinted) {
    String(data: outputData, encoding: .utf8)
}

JSON پارسنگ کی مثالیں

بنیادی پارسنگ پریمٹو ٹائپس کے ساتھ ایک ڈکشنری کا JSONSerialization کے ساتھ سب سے عام آپریشن ہے۔ URLSession کے ذریعے Data حاصل کرنے کے بعد، ڈیویلپر jsonObject کو کال کرتا ہے اور نتیجہ کو متوقعہ ٹائپ میں تبدیل کرتا ہے۔ آبجیکٹس کے ارے کے لیے، [[String: Any]] میں کاسٹنگ استعمال کی جاتی ہے، جس کے بعد ہر عنصر ایک لوپ میں پروسیس کیا جاتا ہے۔ یہ طریقہ لچیلدار ہے لیکن دستی ٹائپ منیجمنٹ کی ضرورت ہے۔

مداخل ساختوں کا پارسنگ

حقیقی API ارے، تاریخوں اور اختیاری فیلڈز کے ساتھ پیچیدہ مداخل JSON آبجیکٹس واپس کرتے ہیں۔ JSONSerialization کسی بھی مداخل گھرائی کو صحیح طور پر ہینڈل کرتا ہے، لیکن ڈیویلپر کو ہر سطح کو علاحدہ طور پر ماطلبہ ٹائپ میں تبدیل کرنا ہوگا۔ اس کام کو آسان بنانے کے لیے، Apple ٹائپ شدہ ڈیٹا کے لیے Codable اور صرف ڈائنامیک ساختوں کے لیے JSONSerialization استعمال کرنے کی سفارش کرتا ہے۔

swift
// API جواب کا پارسنگ
func parseUserResponse(data: Data) {
    do {
        guard let json = try JSONSerialization
            .jsonObject(with: data) as? [String: Any]
        else { return }

        guard let userId = json["id"] as? Int,
              let name = json["name"] as? String
        else {
            throw ParsingError.missingField
        }

        print("صارف: \(name) (شناخت: \(userId))")

    } catch let error as ParsingError {
        print("پارسنگ ناکام: \(error)")
    } catch {
        print("غیر متوقعہ غلطی: \(error)")
    }
}

enum ParsingError: Error {
    case missingField
    case invalidType
}

غلطیوں کا انتظام

JSONSerialization غیر موزؤ JSON، ٹائپ کی بے ملنی یا مداخل گھرائی سے تجاوز کرنے پر غلطیاں پھینکتا ہے۔ غلطیاں CocoaError قسم سے تعلق رکھتی ہیں اور مسئلے کی وضاحت کرنے والا کوڈ رکھتی ہیں۔ ڈیویلپر کو do-catch کی تعمیر کے ذریعے انہیں ہینڈل کرنا چاہیے، ورنہ ایپلیکیشن کریش ہو جائے گا۔ سب سے عام غلطیاں ہیں: NSPropertyListReadCorruptError (غیر موزؤ JSON) اور NSPropertyListReadUnknownError۔ ہر قسم کی غلطی کو اپنی الگ ستراٹیجی کی ضرورت ہے: غیر موزؤ فارمیٹ کے لیے ڈیٹا دوبارہ بھیجنے کی درخواست کریں، اور ساخت کی بے ملنی کے لیے پارسنگ موڈل کو اپ ڈیٹ کریں۔

ڈی سیریلائزیشن غلطیوں کی اقسام

غیر موزؤ JSON — ناکامی کی سب سے عام وجہ: غائب کوما، زائد حرف، یا غیر مستشند نقل کا نشان پورے پارسنگ کو توڑ دیتا ہے۔ دوسری قسم کی غلطی متوقعہ ساخت سے بے ملنی ہے: مثال کے طور پر، سرور نے ڈکشنری کے بجائے ایک ارے واپس کیا۔ JSONSerialization.fragmentsAllowed اس JSON کو پڑھنے کی اجازت دیتا ہے جس کی جڑ ڈکشنری یا ارے نہیں بلکہ ایک پریمٹو قیمت ہو۔ ڈیویلپر کو مداخل گھرائی سے تجاوز کی غلطی کا بھی سامنا کرنا پڑ سکتا ہے جب JSON میں بہت زیادہ درجہ بندی کے مراتب ہوں۔

پڑھنے اور لکھنے کے اختیارات

JSONSerialization پارسنگ ترتیب دےنے کے لیے کئی اختیارات فراہم کرتا ہے۔ .mutableContainers ناقابل تبدیل ورژنز کے بجائے NSMutableDictionary اور NSMutableArray واپس کرتا ہے، جو پارسنگ کے بعد ڈیٹا میں تبدیل کرتے وقت مفید ہے۔ .mutableLeaves سٹرنگ قیمتوں کو قابل تبدیل بناتا ہے۔ .fragmentsAllowed اس JSON کی اجازت دیتا ہے جس کی جڑ کوئی آبجیکٹ یا ارے نہیں بلکہ ایک سٹرنگ یا نمبر ہو — سادہ API جوابوں کے لیے آسان ہے۔ .withoutEscapingSlashes اور .sortedKeys اختیارات data(withJSONObject:options:) طریقے کے لیے دستیاب ہیں، سیریلائزشدہ JSON کی فارمیٹنگ کو کنٹرول کرتے ہیں۔ اختیارات ایک بٹ ماسک کے طور پر منتقل کیے جاتے ہیں، جو لچیلدار پارسنگ ترتیب کے لیے | آپریٹر کے ذریعے متعدد قیمتوں کو ملانے کی اجازت دیتا ہے۔

swift
// مختلف قسموں کی غلطیوں کا انتظام
func safeParse(jsonData: Data) {
    do {
        let object = try JSONSerialization
            .jsonObject(with: jsonData,
                           options: .fragmentsAllowed)

        if let dictionary = object as? [String: Any] {
            print("\(dictionary.count) کلیوں کے ساتھ ڈکشنری")
        } else if let array = object as? [Any] {
            print("\(array.count) آئٹمز کے ساتھ ارے")
        }

    } catch CocoaError.propertyListReadCorrupt {
        print("خراب JSON ڈیٹا")
    } catch let error as CocoaError {
        print("Cocoa غلطی: \(error)")
    } catch {
        print("نامعلوم غلطی: \(error)")
    }
}

// سیریلائزیشن سے پہلے آبجیکٹ کی موزوئیت کی جانچ
let testObject: [String: Any] = ["key": "value", "nested": ["a": 1]]
if JSONSerialization.isValidJSONObject(testObject) {
    print("موزؤ JSON آبجیکٹ")
}

JSONSerialization کی کارکردگی ڈیٹا کے سائز اور کال کی تکرار پر منحصر ہے۔ ایک چہوٹے سرور جواب کے ایک بار پارسنگ کے لیے فرق بھول کرنے کے قابل نہیں ہے، لیکن دسیاں میگابائٹ JSON یا لوپ میں بار بار کال پر کارروائی کرتے وقت، ٹائپ کاسٹنگ کے اورویہڈ پر غور کرنا چاہیے۔ JSONSerialization موجودہ تھریڈ میں ہم آہنگ طور پر کام کرتا ہے، لہذا بڑی دستاویز کے لیے DispatchQueue.global() کے ذریعے پارسنگ کو پس منظر قطار میں لے جانے کی سفارش کی جاتی ہے۔ متبادل طور پر، آپ پوری فائل کو ممری میں لوڈ کیے بغیر سٹریمنگ پروسیسنگ کے لیے InputStream استعمال کر سکتے ہیں، جو محدود وسائل والی ایپلیکیشنوں کے لیے اهم ہے۔ JSON کو فائل یا نیٹ ورک سٹریم میں لکھنے کے لیے، writeJSONObject(_:to:options:error:) طریقہ ایک انترمیڈییٹ Data آبجیکٹ بنائے بغیر سیریلائزشدہ ڈیٹا کو سیدھا OutputStream کو بھیجنے کی اجازت دیتا ہے، جو بڑی دستاویز کے ساتھ کام کرتے وقت میمری کی کھپت کو کم کرتا ہے۔

اکثر پوچے جانے والے سوالات

iOS میں JSONSerialization کیا ہے؟

JSONSerialization ایک Foundation کلاس ہے جو JSON Data کو Foundation آبجیکٹس (NSDictionary, NSArray) میں تبدیل کرنے اور واپس کرنے کے لیے ہے۔ یہ اضافی لائبریریوں کے بغیر iOS، macOS، tvOS اور watchOS پر کام کرتا ہے۔

JSONSerialization Codable سے کیسے مختلف ہے؟

Codable خودکار ٹائپ شدہ سیریلائزیشن کے لیے ایک Swift پروٹوکل ہے جو ٹائپ محفوظ کوڈ میں کامپائل ہوتا ہے۔ JSONSerialization ڈائنامیک Any ٹائپس کے ساتھ کام کرتا ہے اور دستی کاسٹنگ کی ضرورت ہے۔ Codable نئے مناصبوں کے لیے بہتر ہے، JSONSerialization Objective-C اور ڈائنامیک ڈیٹا کے لیے۔

JSON پارسنگ کی غلطی کو کیسے ہینڈل کیا جائے؟

jsonObject کو کال کرتے وقت do-catch کی تعمیر استعمال کریں۔ JSONSerialization کی غلطیاں CocoaError سے تعلق رکھتی ہیں۔ ڈیبگنگ کے لیے، NSPropertyListReadCorruptError چک کریں، جو غیر موزؤ JSON ڈیٹا فارمیٹ کو ظاہر کرتا ہے۔

کیا JSONSerialization مداخل ساختوں کی حمایت کرتا ہے؟

جی ہاں، JSONSerialization ڈکشنریوں اور ارے کی کسی بھی مداخل گھرائی کی حمایت کرتا ہے۔ تمام مداخل آبجیکٹس مناسب Foundation قسموں (NSDictionary، NSArray، NSString، NSNumber) میں تبدیل ہو جاتے ہیں، اصلی JSON ساخت کو برقرار رکھتے هوئے۔

Codable کے بجائے JSONSerialization کب استعمال کریں؟

JSONSerialization ڈائنامیک JSON ساختوں، Objective-C مناصبوں، سٹریمز کے ساتھ کام کرتے وقت، اور isValidJSONObject کے ذریعے JSON توصیق کے لیے موزؤ ہے۔ معروف اسکیما کے ساتھ ٹائپ شدہ ساختوں کے لیے Codable بہتر ہے۔

خلاصہ

  • JSONSerialization — Apple پلیٹ فارمز پر بنیادی JSON ہینڈلنگ کے لیے ایک بیلٹ ان Foundation کلاس
  • jsonObject — اہم پارسنگ طریقہ جو Data کو Foundation ڈکشنریوں اور ارے میں تبدیل کرتا ہے
  • data — Foundation آبجیکٹس کو فارمیٹنگ اختیارات کے ساتھ JSON Data میں تبدیل کرنے کا الٹ سیریلائزیشن طریقہ
  • isValidJSONObject — اس بات کی جانچ کے لیے ایک قاعدہ کہ آبجیکٹ JSON میں سیریلائز کیا جا سکتا ہے یا نہیں
  • غلطیوں کا انتظام ایپلیکیشن کے کریش کو روکنے کے لیے do-catch کے ذریعے لازمی ہے
  • Codable — معروف ڈیٹا اسکیما والے Swift مناصبوں کے لیے ایک جدید ٹائپ شدہ متبادل

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں