تحويل JSON إلى Swift Codable struct
مناسبة لتطبيقات iOS وmacOS، فالناتج يقرأ مباشرة عبر JSONDecoder.
جارٍ تحميل الأداة…
المعالجة والخصوصية: تُحسب النتيجة داخل متصفحك ولا تُرسل بياناتك إلى أي خادم.
طريقة الاستخدام
- أدخل نص JSON واسم النوع الرئيسي.
- تظهر النتيجة فورًا وتتحدّث مع كل تعديل.
- انسخ النتيجة، أو انسخ رابطًا يحفظ القيم نفسها لمشاركتها.
طريقة الحساب
String وInt وDouble وBool و[T]، وstruct تتبع Codable لكل كائن. عند اختلاف اسم الخاصية بصيغة camelCase عن المفتاح تضاف CodingKeys، والحقل الذي يقبل null أو يغيب يصبح اختياريا T?. القيم المختلطة تستخدم enum JSONValue يرفق مع الناتج.
مثال
المدخلات: اسم النوع الرئيسي = Root. النتيجة: الكود الناتج: import Foundation struct Root: Codable { let id: Int let name: String let email: String let isActive: Bool let balance: Double let tags: [String] let address: Address let orders: [Order] enum CodingKeys: String, CodingKey { case id case name case email case isActive = "is_active" case balance case tags case address case orders } } struct Address: Codable { let city: String let postalCode: String enum CodingKeys: String, CodingKey { case city case postalCode = "postal_code" } } struct Order: Codable { let orderId: String let total: Double let coupon: String? enum CodingKeys: String, CodingKey { case orderId = "order_id" case total case coupon } }، عدد الأنواع: 3، عدد الحقول: 13.
{
"id": 1024,
"name": "Sara Ahmed",
"email": "sara@example.com",
"is_active": true,
"balance": 1520.75,
"tags": ["vip", "riyadh"],
"address": { "city": "Riyadh", "postal_code": "12211" },
"orders": [
{ "order_id": "A-1", "total": 99.5, "coupon": "EID10" },
{ "order_id": "A-2", "total": 120, "coupon": null }
]
}import Foundation
struct Root: Codable {
let id: Int
let name: String
let email: String
let isActive: Bool
let balance: Double
let tags: [String]
let address: Address
let orders: [Order]
enum CodingKeys: String, CodingKey {
case id
case name
case email
case isActive = "is_active"
case balance
case tags
case address
case orders
}
}
struct Address: Codable {
let city: String
let postalCode: String
enum CodingKeys: String, CodingKey {
case city
case postalCode = "postal_code"
}
}
struct Order: Codable {
let orderId: String
let total: Double
let coupon: String?
enum CodingKeys: String, CodingKey {
case orderId = "order_id"
case total
case coupon
}
}الحدود والملاحظات
- الخصائص معرفة بالكلمة let، فغيرها إلى var إذا احتجت تعديل القيم.
- Int في Swift عدد 64 بت على الأجهزة الحديثة.
أسئلة شائعة عن هذه الأداة
متى تضاف CodingKeys؟
عندما يختلف اسم خاصية واحدة على الأقل عن مفتاح JSON، مثل postal_code الذي يصبح postalCode.
ما هو JSONValue في الناتج؟
enum صغير يقرأ أي قيمة JSON، ويستخدم للمفتاح الذي تختلف أنواعه أو لا يحمل إلا null.
هل يمكنني استخدام convertFromSnakeCase بدل CodingKeys؟
نعم في أغلب الحالات، لكن CodingKeys أوضح وتعمل مع مفاتيح فيها شرطات أو مسافات.
