العمل مع JSON في Swift: التحليل والتسلسل للمبتدئين

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

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

ابدأ الدورة

العمل مع JSON في Swift: التحليل والتسلسل للمبتدئين

\n\n

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

\n\n

ما هو JSON ولماذا هو مهم في Swift؟

\n\n

JSON هو تنسيق نصي يعتمد على بناء جملة JavaScript. يتكون من أزواج "مفتاح-قيمة"، وكائنات متداخلة، ومصفوفات. في تطوير iOS، يُستخدم JSON من أجل:

\n\n
    \n
  • الحصول على البيانات من خوادم REST API
  • \n
  • حفظ إعدادات وتهيئات التطبيق
  • \n
  • تبادل البيانات بين وحدات التطبيق
  • \n
  • العمل مع قواعد البيانات (مثل Firebase أو CoreData + JSON)
  • \n
\n\n

في Swift، هناك طريقتان رئيسيتان للعمل مع JSON: الطريقة القديمة عبر JSONSerialization (من Foundation) والطريقة الحديثة باستخدام البروتوكولات Codable و Encodable و Decodable. سنبدأ بـ JSONSerialization الأبسط لفهم الآلية، ثم ننتقل إلى Codable القوي.

\n\n

تحليل JSON باستخدام JSONSerialization (Foundation)

\n\n

JSONSerialization هو فئة مدمجة في Foundation تقوم بتحويل بيانات JSON إلى كائنات Swift (قواميس ومصفوفات). هذه الطريقة موجودة منذ الإصدارات الأولى من Swift وما زالت تُستخدم في المشاريع القديمة. دعنا نستعرض مثالًا.

\n\n

لنفترض أن لدينا سلسلة JSON تحتوي على معلومات عن مستخدم:

\n\n
let jsonString = """\n{\n    "name": "إيفان",\n    "age": 30,\n    "email": "ivan@example.com",\n    "isActive": true,\n    "hobbies": ["قراءة", "برمجة", "رياضة"]\n}\n"""
\n\n

لتحليل هذا JSON، نقوم أولاً بتحويل السلسلة إلى بيانات Data، ثم نستخدم JSONSerialization:

\n\n
import Foundation\n\nif let jsonData = jsonString.data(using: .utf8) {\n    do {\n        if let dictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] {\n            print("الاسم: \\(dictionary["name"] ?? "لا توجد بيانات")")\n            print("العمر: \\(dictionary["age"] ?? "لا توجد بيانات")")\n            if let hobbies = dictionary["hobbies"] as? [String] {\n                print("الهوايات: \\(hobbies.joined(separator: ", "))")\n            }\n        }\n    } catch {\n        print("خطأ في تحليل JSON: \\(error.localizedDescription)")\n    }\n}
\n\n

نقاط مهمة:

\n
    \n
  • استخدم دائمًا try-catch — قد يسبب التحليل خطأ.
  • \n
  • النتيجة تأتي كـ Any، لذا يجب تحويلها إلى نوع محدد ([String: Any] للكائن، [Any] للمصفوفة).
  • \n
  • الخيارات .mutableContainers و .fragmentsAllowed تسمح بالتحكم في مرونة التحليل.
  • \n
\n\n

الطريقة الحديثة: بروتوكول Codable

\n\n

ابتداءً من Swift 4، قدمت Apple بروتوكول Codable (الذي يجمع بين Encodable و Decodable). هذا هو "السحر" الحقيقي — يكفي تعريف هيكل (struct)، وسيعرف Swift تلقائيًا كيفية تحليل البيانات وتسلسلها. دعنا نعيد كتابة المثال السابق باستخدام Codable.

\n\n

1. تعريف نموذج البيانات

\n\n
struct User: Codable {\n    let name: String\n    let age: Int\n    let email: String\n    let isActive: Bool\n    let hobbies: [String]\n}
\n\n

لاحظ: يجب أن تتطابق أسماء الحقول في الهيكل مع مفاتيح JSON (حالة الأحرف مهمة). إذا كانت المفاتيح مختلفة (مثل snake_case)، استخدم CodingKeys.

\n\n

2. تحليل J

المدونات

توصيات الكتب