تحويل JSON إلى Python TypedDict
اختر TypedDict عندما تبقى البيانات قاموسا عاديا وتريد فحص الأنواع عبر mypy أو Pyright.
جارٍ تحميل الأداة…
المعالجة والخصوصية: تُحسب النتيجة داخل متصفحك ولا تُرسل بياناتك إلى أي خادم.
طريقة الاستخدام
- أدخل نص JSON واسم النوع الرئيسي.
- تظهر النتيجة فورًا وتتحدّث مع كل تعديل.
- انسخ النتيجة، أو انسخ رابطًا يحفظ القيم نفسها لمشاركتها.
طريقة الحساب
str وint وfloat وbool وList[T] وAny، وTypedDict لكل كائن. المفتاح الغائب في بعض العناصر يغلف بالنوع NotRequired، وnull يجعل النوع Optional[T]. إذا احتوى الكائن مفتاحا غير صالح كاسم في Python تستخدم صيغة الاستدعاء TypedDict("Name", {"key": type}) فتبقى المفاتيح كما هي.
مثال
المدخلات: اسم النوع الرئيسي = Root. النتيجة: الكود الناتج: from typing import List, Optional, TypedDict class Order(TypedDict): order_id: str total: float coupon: Optional[str] class Address(TypedDict): city: str postal_code: str class Root(TypedDict): 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, TypedDict
class Order(TypedDict):
order_id: str
total: float
coupon: Optional[str]
class Address(TypedDict):
city: str
postal_code: str
class Root(TypedDict):
id: int
name: str
email: str
is_active: bool
balance: float
tags: List[str]
address: Address
orders: List[Order]الحدود والملاحظات
- NotRequired موجودة في typing منذ Python 3.11، وللإصدارات الأقدم استوردها من typing_extensions.
- TypedDict للتلميح فقط ولا تتحقق من البيانات وقت التشغيل.
أسئلة شائعة عن هذه الأداة
ما الفرق بين TypedDict وdataclass؟
TypedDict يصف قاموسا عاديا كما يأتي من json.loads، أما dataclass فينشئ كائنا جديدا تحتاج إلى بنائه من البيانات.
لماذا استخدمت صيغة TypedDict("Root", {}) أحيانا؟
لأن مفتاحا مثل "full-name" لا يصلح اسما لخاصية في صنف، وصيغة الاستدعاء تقبل أي نص كمفتاح.
هل ترسل بياناتي إلى خادم؟
لا، التحويل يعمل داخل متصفحك ولا يغادر نص JSON جهازك.
