معالجة JSON في Swift: Codable وFoundation وSwiftyJSON لنظامي iOS/macOS

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

معالجة JSON في Swift (iOS/macOS): دليل شامل



JSON (JavaScript Object Notation) هو أحد أكثر تنسيقات تبادل البيانات شيوعًا في التطبيقات الحديثة. في نظام Apple البيئي (iOS، macOS، watchOS، tvOS)، يوفر Swift عدة طرق قوية للعمل مع JSON. في هذه المقالة، سنشرح ثلاثة أساليب رئيسية: الأصلي Codable، ومنخفض المستوى JSONSerialization، والمكتبة الخارجية الشهيرة SwiftyJSON. ستتعلم كيفية تحليل وإنشاء ومعالجة JSON في Swift مع أمثلة برمجية.



1. Codable — المعيار الحديث لـ Swift



بدءًا من Swift 4، قدمت Apple بروتوكولات Codable (التي تجمع بين Encodable و Decodable). هذه هي الطريقة الأكثر ملاءمة وأمانًا من حيث النوع للعمل مع JSON. كل ما عليك فعله هو تعريف هيكل أو فئة تتوافق مع Codable، واستخدام JSONEncoder/JSONDecoder.



مثال: تحليل JSON من استجابة API



import Foundation

// تعريف النموذج، المتوافق تلقائيًا مع Codablestruct User: Codable { let id: Int let name: String let email: String let isActive: Bool}

// مثال لسلسلة JSONlet jsonString = """{ "id": 42, "name": "إيفان بيتروف", "email": "ivan@example.com", "isActive": true}"""

// التحليلif let jsonData = jsonString.data(using: .utf8) { let decoder = JSONDecoder() do { let user = try decoder.decode(User.self, from: jsonData) print("المستخدم: \\(user.name)، البريد الإلكتروني: \\(user.email)") } catch { print("خطأ في فك الترميز: \\(error.localizedDescription)") }}


مثال: إنشاء JSON من كائن



let user = User(id: 1, name: "آنا سميرنوفا", email: "anna@test.com", isActive: false)let encoder = JSONEncoder()encoder.outputFormatting = .prettyPrinted // للتنسيق الجميل

if let jsonData = try? encoder.encode(user), let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString)}


العمل مع الهياكل المتداخلة والمصفوفات



struct Company: Codable {    let name: String    let employees: [User]}

let companyJson = """{ "name": "TechCorp", "employees": [ {"id": 1, "name": "أوليغ", "email": "oleg@tc.com", "isActive": true}, {"id": 2, "name": "ماريا", "email": "maria@tc.com", "isActive": false} ]}"""

if let data = companyJson.data(using: .utf8), let company = try? JSONDecoder().decode(Company.self, from: data) { print("الشركة: \\(company.name)، عدد الموظفين: \\(company.employees.count)")}


2. JSONSerialization — النهج الكلاسيكي (Foundation)



قبل ظهور Codable، كانت الأداة الرئيسية هي JSONSerialization من Foundation. وهي تعمل مع القواميس والمصفوفات الخاصة بـ Foundation ([String: Any] و [Any]). هذه الطريقة مفيدة عندما يكون هيكل JSON غير معروف مسبقًا أو ديناميكيًا للغاية.



مثال: التحليل باستخدام JSONSerialization



if let data = jsonString.data(using: .utf8) {    do {        if let dict = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {            let id = dict["id"] as? Int ?? 0            let name = dict["name"] as? String ?? "غير معروف"            print("المعرف: \\(id)، الاسم: \\(name)")        }    } catch {        print("خطأ: \\(error)")    }}


العيب: عدم وجود أمان من حيث النوع — يجب تحويل الأنواع يدويًا، مما قد يؤدي إلى أخطاء وقت التشغيل. يُوصى باستخدام Codable حيثما أمكن.



3. SwiftyJSON — مكتبة خارجية ملائمة



SwiftyJSON هي مكتبة مفتوحة المصدر شائعة

توصيات