الترميز باستخدام JSONEncoder
أنشئ بيانات JSON من قيم Swift.
الترميز باستخدام JSONEncoder درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
إنشاء JSONEncoder
يُعد JSONEncoder الأداة الأساسية التي تحوّل أي قيمة من النوع Encodable إلى Data بصيغة JSON. أنشئ كائنًا منه، ثم استدعِ encode(_:) على قيمتك.
import Foundation
struct Movie: Codable {
var title: String
var year: Int
}
let encoder = JSONEncoder()
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(data.count, "bytes")من Data إلى String قابلة للقراءة
تعيد encode(_:) قيمة Data ثنائية. ولقراءتها، فك ترميز البايتات باستخدام UTF-8 عبر String(data:encoding:).
import Foundation
struct Movie: Codable {
var title: String
var year: Int
}
let data = try JSONEncoder().encode(Movie(title: "Up", year: 2009))
let text = String(data: data, encoding: .utf8)!
print(text)مخرجات منسقة
يكون JSON مضغوطًا افتراضيًا. اضبط outputFormatting = .prettyPrinted لإضافة المسافات البادئة والأسطر الجديدة، مما يجعل النتيجة سهلة القراءة للبشر.
import Foundation
struct Movie: Codable {
var title: String
var year: Int
}
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(String(data: data, encoding: .utf8)!)مفاتيح مرتبة لمخرجات ثابتة
اجمع الخيارات في مصفوفة. تؤدي إضافة .sortedKeys إلى ترتيب المفاتيح أبجديًا، مما يجعل المخرجات حتمية، وهو أمر مناسب للاختبارات واللقطات.
import Foundation
struct Movie: Codable {
var title: String
var year: Int
var rating: Double
}
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(Movie(title: "Up", year: 2009, rating: 4.8))
print(String(data: data, encoding: .utf8)!)ترميز المصفوفات
يمكنك ترميز المجموعات مباشرةً. وتتحول مصفوفة من القيم Encodable إلى مصفوفة JSON.
import Foundation
struct Movie: Codable {
var title: String
var year: Int
}
let list = [Movie(title: "Up", year: 2009),
Movie(title: "Coco", year: 2017)]
let data = try JSONEncoder().encode(list)
print(String(data: data, encoding: .utf8)!)ترميز القواميس
يُرمّز القاموس من النوع [String: Encodable-element] إلى كائن JSON. لاحظ أن ترتيب المفاتيح غير مضمون ما لم تضف .sortedKeys.
import Foundation
let scores: [String: Int] = ["alice": 90, "bob": 75]
let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
let data = try encoder.encode(scores)
print(String(data: data, encoding: .utf8)!)ترميز البنى المتداخلة
تُرمّز أنواع Codable المتداخلة بشكل تكراري، فتنتج تلقائيًا كائنات JSON متداخلة.
import Foundation
struct Author: Codable { var name: String }
struct Post: Codable {
var title: String
var author: Author
}
let p = Post(title: "Hello", author: Author(name: "Mae"))
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
print(String(data: try encoder.encode(p), encoding: .utf8)!)إعادة استخدام Encoder
يمكن إعادة استخدام JSONEncoder مُعدّ مسبقًا لعدد كبير من القيم. اضبطه مرة واحدة، ثم طبّق التنسيق نفسه باستمرار في شيفرتك.
import Foundation
struct Tag: Codable { var name: String }
let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
for t in [Tag(name: "swift"), Tag(name: "json")] {
let data = try encoder.encode(t)
print(String(data: data, encoding: .utf8)!)
}ترميز الأرقام والقيم المنطقية
تُرمّز الخصائص الرقمية والمنطقية على شكل قيم JSON حرفية، من دون علامات اقتباس. أما السلاسل النصية فتُحاط بعلامات اقتباس، بخلاف Int وDouble وBool.
import Foundation
struct Stats: Codable {
var count: Int
var ratio: Double
var enabled: Bool
}
let data = try JSONEncoder().encode(Stats(count: 3, ratio: 0.75, enabled: true))
print(String(data: data, encoding: .utf8)!)ترميز القيم الاختيارية
تُحذف القيمة الاختيارية التي تساوي nil من JSON بالكامل افتراضيًا. أما القيمة الاختيارية غير الفارغة فتُرمّز باعتبارها القيمة التي تحتوي عليها.
import Foundation
struct Item: Codable {
var name: String
var note: String?
}
let data = try JSONEncoder().encode(Item(name: "Pen", note: nil))
print(String(data: data, encoding: .utf8)!)تطبيقها معًا
يتضمن تدفق الترميز المعتاد إنشاء القيمة، وإعداد المشفّر، واستدعاء encode، ثم تحويل Data إلى String لتسجيلها أو نقلها.
import Foundation
struct Order: Codable {
var id: Int
var items: [String]
}
let order = Order(id: 42, items: ["a", "b"])
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(order)
print(String(data: data, encoding: .utf8)!)اختبار سريع: JSONEncoder
اختبر معرفتك بالترميز.
مراجعة: الترميز باستخدام JSONEncoder
لقد تعلمت تحويل قيم Swift إلى JSON:
- تعيد
encode(_:)قيمةData؛ ويمكن تحويلها باستخدامString(data:encoding:). - يتحكم
outputFormattingمع.prettyPrintedو.sortedKeysفي التخطيط. - تُرمّز المصفوفات والقواميس والأنواع المتداخلة والأرقام والقيم المنطقية والقيم الاختيارية بطريقة مناسبة.
- يمكن إعادة استخدام المشفّر المُعدّ مسبقًا مع عدد كبير من القيم.
الأسئلة الشائعة
هل درس «الترميز باستخدام JSONEncoder» مجاني؟
نعم — نص درس «الترميز باستخدام JSONEncoder» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «الترميز باستخدام JSONEncoder»؟
أنشئ بيانات JSON من قيم Swift. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الترميز باستخدام JSONEncoder»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المطابقة مع Codable
- الترميز باستخدام JSONEncoder
- فك الترميز باستخدام JSONDecoder
- التعامل مع الأنواع الاختيارية والمتداخلة