تحويل JSON إلى Python dataclass

تكتب الأداة dataclass لكل كائن بترتيب يعرف الصنف قبل استخدامه، وتحافظ على أسماء المفاتيح الصالحة كما هي.

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

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

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

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

طريقة الحساب

str وint وfloat وbool وList[T] وAny، وdataclass لكل كائن متداخل. القيمة null تجعل النوع Optional[T]، والمفتاح الغائب في بعض العناصر يأخذ القيمة الافتراضية None وينقل إلى آخر الصنف لأن Python تشترط أن تأتي الحقول ذات القيم الافتراضية أخيرا.

مثال

المدخلات: اسم النوع الرئيسي = Root. النتيجة: الكود الناتج: from dataclasses import dataclass from typing import List, Optional @dataclass class Order: order_id: str total: float coupon: Optional[str] @dataclass class Address: city: str postal_code: str @dataclass class Root: id: int name: str email: str is_active: bool balance: float tags: List[str] address: Address orders: List[Order]، عدد الأنواع: 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 }
  ]
}
from dataclasses import dataclass
from typing import List, Optional


@dataclass
class Order:
    order_id: str
    total: float
    coupon: Optional[str]


@dataclass
class Address:
    city: str
    postal_code: str


@dataclass
class Root:
    id: int
    name: str
    email: str
    is_active: bool
    balance: float
    tags: List[str]
    address: Address
    orders: List[Order]

الحدود والملاحظات

  • Root(**data) لا يحول القواميس المتداخلة إلى أصناف تلقائيا، فابنها بنفسك أو استخدم مكتبة مثل dacite.
  • المفتاح غير الصالح كاسم في Python يتحول إلى snake_case مع تعليق بالمفتاح الأصلي.

أسئلة شائعة عن هذه الأداة

لماذا انتقل بعض الحقول إلى آخر الصنف؟

الحقول التي لها قيمة افتراضية = None يجب أن تأتي بعد الحقول الإلزامية، وإلا ترفض Python تعريف الصنف.

ما إصدار Python المطلوب؟

Python 3.7 أو أحدث، لأن dataclasses دخلت المكتبة القياسية في هذا الإصدار.

هل ترسل بياناتي إلى خادم؟

لا، التحويل يعمل داخل متصفحك ولا يغادر نص JSON جهازك.