تحويل JSON إلى Pydantic model

مناسبة لمشاريع FastAPI وغيرها، إذ تكتب BaseModel لكل كائن يتحقق من البيانات عند قراءتها.

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

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

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

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

طريقة الحساب

str وint وfloat وbool وList[T] وAny، وBaseModel لكل كائن متداخل. أسماء الحقول بصيغة snake_case، وعند اختلافها عن مفتاح JSON يضاف Field(alias="المفتاح"). القيمة null تجعل النوع Optional[T] إلزاميا، والمفتاح الغائب في بعض العناصر يأخذ القيمة الافتراضية None.

مثال

المدخلات: اسم النوع الرئيسي = Root. النتيجة: الكود الناتج: from typing import List, Optional from pydantic import BaseModel class Order(BaseModel): order_id: str total: float coupon: Optional[str] class Address(BaseModel): city: str postal_code: str class Root(BaseModel): 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 typing import List, Optional

from pydantic import BaseModel


class Order(BaseModel):
    order_id: str
    total: float
    coupon: Optional[str]


class Address(BaseModel):
    city: str
    postal_code: str


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

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

  • الكود مكتوب للإصدار 2 من Pydantic.
  • مع alias تمرر البيانات بمفاتيح JSON الأصلية، ولاستخدام أسماء الحقول فعّل populate_by_name في model_config.

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

ما فائدة Field(alias)؟

تسمح بكتابة الحقل بصيغة snake_case في Python مع قراءة المفتاح الأصلي مثل userId من JSON.

ما الفرق بين Optional[str] وOptional[str] = None هنا؟

الأول يعني أن المفتاح موجود دائما وقد يكون null، والثاني يعني أنه قد يغيب تماما من بعض العناصر.

كيف أقرأ JSON بالنموذج الناتج؟

استخدم Root.model_validate(data) لقاموس، أو Root.model_validate_json(text) لنص JSON.