تحويل JSON إلى Pydantic model
مناسبة لمشاريع FastAPI وغيرها، إذ تكتب BaseModel لكل كائن يتحقق من البيانات عند قراءتها.
جارٍ تحميل الأداة…
المعالجة والخصوصية: تُحسب النتيجة داخل متصفحك ولا تُرسل بياناتك إلى أي خادم.
طريقة الاستخدام
- أدخل نص JSON واسم النوع الرئيسي.
- تظهر النتيجة فورًا وتتحدّث مع كل تعديل.
- انسخ النتيجة، أو انسخ رابطًا يحفظ القيم نفسها لمشاركتها.
طريقة الحساب
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.
