Swift में JSON के साथ काम करना: पार्सिंग और सीरियलाइज़ेशन
JSON (JavaScript Object Notation) मोबाइल और डेस्कटॉप एप्लिकेशन में क्लाइंट और सर्वर के बीच डेटा आदान-प्रदान के लिए डी-फैक्टो मानक बन गया है। Swift (iOS/macOS) इकोसिस्टम में JSON के साथ काम करना सबसे उच्च स्तर पर लागू किया गया है — सरल JSONSerialization से लेकर शक्तिशाली Codable प्रोटोकॉल तक। इस लेख में हम Swift में JSON को पार्स और सीरियलाइज़ करने के सभी मुख्य तरीकों को समझेंगे, व्यावहारिक उदाहरण देंगे और दिखाएंगे कि सामान्य गलतियों से कैसे बचा जाए।
1. Swift में JSON के साथ काम करने की मूल बातें: JSONSerialization
Swift 4 के आने से पहले, JSON के साथ काम करने का मुख्य उपकरण JSONSerialization क्लास था, जो Foundation का हिस्सा है। यह JSON डेटा को Swift ऑब्जेक्ट्स (डिक्शनरी, ऐरे, स्ट्रिंग्स, नंबर्स) में बदलने और वापस बदलने की अनुमति देता है। यह विधि तब भी प्रासंगिक है जब आपको प्रक्रिया पर पूर्ण नियंत्रण चाहिए या आप पुराने कोड के साथ काम कर रहे हैं।
JSONSerialization का उपयोग करके JSON पार्स करना
मान लीजिए हमें सर्वर से एक JSON स्ट्रिंग मिली:
let jsonString = """{ "name": "इवान", "age": 30, "isPremium": true, "hobbies": ["पढ़ना", "दौड़ना", "प्रोग्रामिंग"]}"""
guard let jsonData = jsonString.data(using: .utf8) else { fatalError("स्ट्रिंग को Data में एन्कोड करने में त्रुटि")}
do { if let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] { let name = jsonObject["name"] as? String ?? "" let age = jsonObject["age"] as? Int ?? 0 let isPremium = jsonObject["isPremium"] as? Bool ?? false let hobbies = jsonObject["hobbies"] as? [String] ?? [] print("नाम: \\(name), आयु: \\(age), प्रीमियम: \\(isPremium), शौक: \\(hobbies)") }} catch { print("JSON पार्स करने में त्रुटि: \\(error.localizedDescription)")}इस दृष्टिकोण की कमी यह है कि मैन्युअल रूप से टाइप कास्ट करना और ऑप्शनल वैल्यू को संभालना आवश्यक है। कोड बोझिल और त्रुटि-प्रवण हो जाता है।
JSONSerialization का उपयोग करके JSON में सीरियलाइज़ेशन
उल्टी प्रक्रिया — Swift डिक्शनरी को JSON डेटा में बदलना:
let personDict: [String: Any] = [ "name": "मारिया", "age": 25, "isPremium": false, "hobbies": ["चित्रकारी", "योग"]]
do { let jsonData = try JSONSerialization.data(withJSONObject: personDict, options: .prettyPrinted) if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) }} catch { print("सीरियलाइज़ेशन में त्रुटि: \\(error.localizedDescription)")}.prettyPrinted विकल्प आउटपुट को मानव-पठनीय बनाता है। प्रोडक्शन के लिए आमतौर पर ट्रैफ़िक बचाने के लिए [] (बिना फ़ॉर्मेटिंग के) का उपयोग किया जाता है।
2. आधुनिक दृष्टिकोण: Codable प्रोटोकॉल और JSONDecoder
Swift 4 से शुरू होकर, Codable प्रोटोकॉल (जो Encodable और Decodable को जोड़ता है) के कारण JSON के साथ काम करना काफी आसान हो गया है। आप बस डेटा संरचना का वर्णन करते हैं, और कंपाइलर स्वचालित रूप से एन्कोडिंग/डिकोडिंग के लिए कोड जनरेट करता है।
JSONDecoder का उपयोग करके JSON पार्स करना
अपने JSON के लिए एक मॉडल परिभाषित करें:
struct Person: Codable { let name: String let age: Int let isPremium: Bool let hobbies: [String]}
let jsonString = """{ "name": "इवान", "age": 30, "isPremium": true, "hobbies": ["पढ़ना", "दौड़ना", "प्रोग्रामिंग"]}"""
guard let jsonData = jsonString.data(using: .utf8) else { fatalError("स्ट्रिंग एन्कोड करने में त्रुटि")}
do { let person = try JSONDecoder().decode(Person.self, from: jsonData) print("नाम: \\(person.name), आयु: \\(person.age), प्रीमियम: \\(person.isPremium), शौक: \\(person.hobbies)")} catch { print("डिकोड करने में त्रुटि: \\(error.localizedDescription)")}जैसा कि आप देख सकते हैं, कोड बहुत साफ हो गया है। सभी टाइप कास्टिंग और जाँचें