تحويل JSON إلى Swift Codable struct

مناسبة لتطبيقات iOS وmacOS، فالناتج يقرأ مباشرة عبر JSONDecoder.

جارٍ تحميل الأداة…

المعالجة والخصوصية: تُحسب النتيجة داخل متصفحك ولا تُرسل بياناتك إلى أي خادم.

طريقة الاستخدام

  1. أدخل نص JSON واسم النوع الرئيسي.
  2. تظهر النتيجة فورًا وتتحدّث مع كل تعديل.
  3. انسخ النتيجة، أو انسخ رابطًا يحفظ القيم نفسها لمشاركتها.

طريقة الحساب

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 أوضح وتعمل مع مفاتيح فيها شرطات أو مسافات.