Swift में JSON के साथ कार्य: पार्सिंग और सीरियलाइज़ेशन
JSON (JavaScript Object Notation) एक हल्का डेटा विनिमय प्रारूप है, जिसका व्यापक रूप से वेब सेवाओं और मोबाइल ऐप्स में उपयोग किया जाता है। Apple इकोसिस्टम (iOS, macOS, watchOS, tvOS) में JSON के साथ कार्य करना डेवलपमेंट का एक अभिन्न अंग है: सर्वर से डेटा लोड करने से लेकर ऐप सेटिंग्स को सहेजने तक। इस लेख में, हम विस्तार से देखेंगे कि Swift में बिल्ट-इन प्रोटोकॉल Codable, JSONDecoder और JSONEncoder का उपयोग करके JSON को कैसे पार्स (डिकोड) और सीरियलाइज़ (एनकोड) किया जाए।
1. Codable की मूल बातें: डेटा मॉडल
Swift में JSON के साथ कार्य करने का आधुनिक दृष्टिकोण Codable प्रोटोकॉल पर आधारित है, जो दो प्रोटोकॉल को जोड़ता है: Encodable (सीरियलाइज़ेशन के लिए) और Decodable (पार्सिंग के लिए)। आपकी संरचना या क्लास को JSON में और वापस बदलने के लिए, बस उन्हें Codable के रूप में घोषित करना पर्याप्त है।
एक उपयोगकर्ता मॉडल का उदाहरण देखें:
struct User: Codable { let id: Int let name: String let email: String let isActive: Bool}यदि JSON में कुंजियाँ Swift में गुणों के नामों से भिन्न हैं (उदाहरण के लिए, camelCase के बजाय snake_case का उपयोग किया जाता है), तो आप CodingKeys एनुम का उपयोग कर सकते हैं:
struct User: Codable { let id: Int let fullName: String let email: String let isActive: Bool
enum CodingKeys: String, CodingKey { case id case fullName = "full_name" case email case isActive = "is_active" }}2. JSONDecoder के साथ JSON पार्सिंग
JSON स्ट्रिंग या डेटा को Swift ऑब्जेक्ट्स में बदलने के लिए JSONDecoder का उपयोग किया जाता है। मुख्य विधि decode(_:from:) है, जो डेटा प्रकार (Decodable के अनुरूप) और एक Data ऑब्जेक्ट लेती है।
API से प्राप्त JSON स्ट्रिंग को पार्स करने का उदाहरण:
let jsonString = """{ "id": 1, "name": "इवान पेत्रोव", "email": "ivan@example.com", "is_active": true}"""
let jsonData = Data(jsonString.utf8)
do { let decoder = JSONDecoder() let user = try decoder.decode(User.self, from: jsonData) print("उपयोगकर्ता: \\(user.name), ईमेल: \\(user.email)")} catch { print("डिकोडिंग त्रुटि: \\(error.localizedDescription)")}अक्सर JSON ऑब्जेक्ट्स की एक सरणी के रूप में आता है। इस मामले में, बस प्रकार [User].self निर्दिष्ट करें:
let jsonArrayString = """[ {"id": 1, "name": "इवान", "email": "ivan@test.com", "is_active": true}, {"id": 2, "name": "मारिया", "email": "maria@test.com", "is_active": false}]"""
let jsonArrayData = Data(jsonArrayString.utf8)
do { let users = try JSONDecoder().decode([User].self, from: jsonArrayData) users.forEach { print($0.name) }} catch { print("त्रुटि: \\(error)")}3. JSONEncoder के साथ ऑब्जेक्ट्स का JSON में सीरियलाइज़ेशन
उल्टी प्रक्रिया - Swift ऑब्जेक्ट को JSON में बदलना - JSONEncoder का उपयोग करके की जाती है। विधि encode(_:) एक Data ऑब्जेक्ट लौटाती है, जिसे बाद में एक स्ट्रिंग में बदला जा सकता है या सर्वर पर भेजा जा सकता है।
let user = User(id: 3, fullName: "एलेक्सी स्मिर्नोव", email: "alex@example.com", isActive: true)
do { let encoder = JSONEncoder() encoder.outputFormatting = .prettyPrinted // पठनीय फ़ॉर्मेटिंग के लिए let jsonData = try encoder.encode(user) if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) }} catch { print("एनकोडिंग त्रुटि: \\(error)")}आउटपुट इस प्रकार दिखेगा:
{ "id" : 3, "full_name" : "एलेक्सी स्मिर्नोव", "email" : "alex@example.com", "is_active" : true}ध्यान दें कि JSO