Codable: ترميز JSON وفك ترميزه
اجعلوا الأنواع متوافقة مع Codable، واستخدموا CodingKeys المخصّصة وحاويات فك الترميز المتداخلة.
Codable: ترميز JSON وفك ترميزه درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
بروتوكول Codable
إن Codable هو اسم مستعار للنوع Encodable & Decodable. ويمكن ترميز الأنواع المطابقة له من JSON وفك ترميزها إليه تلقائيًا.
struct User: Codable {
var name: String
var age: Int
}التوليد التلقائي
ينشئ Swift تطبيقات Codable تلقائيًا عندما تكون جميع الخصائص المخزنة نفسها مطابقة لـ Codable.
struct Product: Codable {
var id: Int
var title: String
var price: Double
// init(from:) and encode(to:) are auto-generated
}فك ترميز JSON
استخدموا JSONDecoder لفك ترميز Data إلى نوع Decodable الخاص بكم.
let json = #"{"name":"Alice","age":30}"#.data(using: .utf8)!
let user = try JSONDecoder().decode(User.self, from: json)
print(user.name) // Aliceالترميز إلى JSON
استخدموا JSONEncoder لترميز قيمة مطابقة لـ Codable إلى Data.
let user = User(name: "Bob", age: 25)
let data = try JSONEncoder().encode(user)
print(String(data: data, encoding: .utf8)!)تخصيص CodingKeys
استخدم تعدادًا من نوع CodingKeys للربط بين أسماء خصائص Swift ومفاتيح JSON.
struct Article: Codable {
var createdAt: Date
enum CodingKeys: String, CodingKey {
case createdAt = "created_at"
}
}استراتيجيات فك ترميز التواريخ
اضبط JSONDecoder.dateDecodingStrategy لتحليل التواريخ بتنسيقات متنوعة.
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let article = try decoder.decode(Article.self, from: data)الحاويات المتداخلة
فك ترميز كائنات JSON المتداخلة من خلال تعريف بنى Codable متداخلة أو استخدام الحاويات ذات المفاتيح يدويًا.
struct Response: Codable {
struct Data: Codable {
var users: [User]
}
var data: Data
}
let resp = try JSONDecoder().decode(Response.self, from: json)منطق فك الترميز المخصص
تجاوز init(from:) للتعامل مع هياكل JSON غير القياسية أو لتطبيق تحويلات أثناء فك الترميز.
struct Rating: Codable {
var stars: Int
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let raw = try container.decode(Double.self)
stars = Int(raw.rounded())
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encode(Double(stars))
}
}keyDecodingStrategy
استخدم .convertFromSnakeCase لتحويل مفاتيح JSON المكتوبة بصيغة snake_case تلقائيًا إلى خصائص Swift بصيغة camelCase.
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let user = try decoder.decode(User.self, from: data)
// "first_name" → firstNameخيارات الترميز
اضبط JSONEncoder.outputFormatting للحصول على مخرجات منسقة أو مرتبة.
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(product)التعامل مع الحقول الاختيارية
عرّف الخصائص على أنها Optional للتعامل بسلاسة مع مفاتيح JSON المفقودة دون إلقاء أخطاء.
struct User: Codable {
var name: String
var bio: String? // nil if "bio" key is absent from JSON
}تحقق سريع
ما استراتيجية JSONDecoder التي تربط تلقائيًا مفاتيح JSON بصيغة snake_case بأسماء خصائص Swift بصيغة camelCase؟
مراجعة الدرس
اجعل النوع conform إلى Codable للحصول على ترميز JSON وفك ترميزه تلقائيًا. استخدم CodingKeys لإعادة تعيين أسماء الخصائص، وkeyDecodingStrategy = .convertFromSnakeCase مع واجهات API التي تستخدم snake_case، وinit(from:) المخصص مع JSON غير القياسي، وdateDecodingStrategy لتحليل التواريخ.
الأسئلة الشائعة
هل درس «Codable: ترميز JSON وفك ترميزه» مجاني؟
نعم — نص درس «Codable: ترميز JSON وفك ترميزه» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «Codable: ترميز JSON وفك ترميزه»؟
اجعلوا الأنواع متوافقة مع Codable، واستخدموا CodingKeys المخصّصة وحاويات فك الترميز المتداخلة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «Codable: ترميز JSON وفك ترميزه»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- URLSession data(from:) مع async/await
- Codable: ترميز JSON وفك ترميزه
- معالجة الأخطاء ورموز حالة HTTP
- منطق إعادة المحاولة وURLSession في الخلفية