فئة بيانات من JSON إلى بايثون
قم بلصق عينة JSON للحصول على ملف من نوع @dataclass (أو Pydantic BaseModel) يحتوي على إشارات نوع لكل حقل، str، int، float، bool، Optional[...] وList[...] عند الحاجة؛ حيث تصبح الكائنات المدمجة فئات بيانات مستقلة. يتم إخراج الناتج بصيغة PEP 8 وهو جاهز للنسخ واللصق في ملف بايثون.
كيفية تحويل بيانات JSON إلى فئة بيانات
-
1
لصق بيانات JSON
تكفي عينة واحدة؛ أما استخدام عدة عينات فيحسّن القدرة على اكتشاف الحقول التي يمكن أن تكون فارغة (null).
-
2
اختر النمط
المكتبة القياسية `@dataclass`، أو Pydantic `BaseModel`، أو `TypedDict`، وذلك فقط للتحقق من صحة الأنواع بشكل ساكن.
-
3
اختر إصدار بايثون
٣.٩+ لصيغة `list[str]`، ٣.١٠+ لأنواع الاتحاد `|`، و٣.٨ لـ `Optional[...]`/`List[...]`.
-
4
قم بنسخ الكود.
فئة جذرية واحدة مع فئات متداخلة؛ قم بلصقها في ملف `.py` ثم استوردها.
مثال على الناتج: @dataclass القياسي
المدخل:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
الناتج (باييثون 3.10 أو أحدث):
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class User:
first_name: str
age: int
tags: list[str] = field(default_factory=list)
email: Optional[str] = None
نفس المدخلات باستخدام Pydantic
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
first_name: str
age: int
email: Optional[str] = None
tags: list[str] = []
رسم خرائط الأنواع
| قيمة JSON | نوع بايثون |
|---|---|
| سلسلة نصية | str |
| عدد صحيح | int |
| الرقم (العشري) | float |
| منطقية | bool |
| فارغ (عند عرضه بمفرده) | None |
| فارغ + نوع آخر | Optional[T] |
| سلسلة تاريخ ISO | date (بايثون 3.7+) |
| تاريخ ووقت ISO | datetime |
| مصفوفة من نوع واحد | list[T] |
| مصفوفة مختلطة | list[Union[T1, T2]] |
| الكائن | الفئة المدمجة |
فئة البيانات مقابل Pydantic مقابل TypedDict
| النوع | متى يُستخدم |
|---|---|
@dataclass |
حل من المكتبة القياسية، بدون تحقق أثناء التشغيل |
| Pydantic | التحقق من صحة البيانات أثناء التشغيل والتحويل القسري (FastAPI، الإعدادات) |
TypedDict |
التحقق من النوع الثابت فقط، دون فئة مثيل |
attrs |
مشاريع سابقة تم توحيدها باستخدام attrs |
الأخطاء الشائعة
- تجاهل قيمة
default_factoryللقيم الافتراضية القابلة للتغيير: يُعد القيمة الافتراضيةlist[str] = []فخًا يخص فئة البيانات (مشتركًا بين جميع النماذج)؛ استخدم بدلاً من ذلك القيمةfield(default_factory=list). - اختياري بدون قيمة افتراضية: استخدام
email: Optional[str]دون= Noneيظل يتطلب تمرير الوسيطة، ويجب أن يتماشى مع دلالات تنسيق JSON الخاص بك. - Pydantic الإصدار v1 مقابل v2: تختلف الصيغة النحوية والسلوكيات بينهما (الفئة
Configمقابلmodel_config، وvalidatorمقابلfield_validator)؛ ويُستخدم الإصدار v2 بشكل افتراضي من قبل المولّد. - تُعد ترتيبات الاتحادات أمرًا مهمًا أثناء عملية فك التسلسلية. يحاول برنامج Pydantic تحديد أنواع البيانات وفق ترتيب الإعلان؛ لذا يجب وضع النوع الأكثر تحديدًا في المقدمة (مثلاً:
intقبلstr) في حال وجود غموض محتمل.
الأسئلة الشائعة
فئة بيانات مخصصة للقيم البسيطة دون أي التحقق من صحتها؛ تُستخدم مع Pydantic عند الحاجة إلى التحقق أثناء التنفيذ، أو التحويل القسري للبيانات، أو التكامل مع FastAPI؛ وتُستخدم TypedDict عندما يكفي التحقق الثابت من الأنواع فقط (مثل في أدوات مثل mypy وpyright)، ولا يلزم وجود نماذج من الفئة.
غير مطلوب في إصدارات Python 3.10 فما فوق، حيث تكون تركيبات | وصيغة list[str] مدمجة بشكل أصلي في اللغة. مفيد للمشاريع التي تعمل على إصدارات 3.7 إلى 3.9 لاستخدام الصيغة الأحدث من خلال تعليقات السلاسل المحددة وفقًا لمعيار PEP 563؛ ويُصدر المولد تحذيرًا عند الحاجة إليه.
كل كائن مُدمج يصبح فئة مستقلة بحد ذاتها. تشير الفئة الجذرية إليهم باسمها، مما يسمح بإعادة استخدام أنواع البيانات. يتم اكتشاف الإشارات الدائرية وتمييزها.
نعم، إذا اخترت النمط الخاص بـ Pydantic، فإن FastAPI يستخدم نماذج Pydantic مباشرةً كأنواع لطلبات واستجابات. أما بالنسبة إلى ترتيب البيانات داخليًا، فإن @dataclass يتميز بوزن أقل.
أدوات ذات صلة
مرجع جدول ASCII
جدول ASCII كامل من 0 إلى 127 مع التمثيل العشري والست عشري والثماني والثنائي والمرجع الرقمي في HTML لكل محرف، بما في ذلك أكواد التحكم مثل NUL وLF وDEL.
مرجع أحرف HTML
قائمة قابلة للبحث بكيانات HTML، مع رموزها المسمّاة والرقمية، بالإضافة إلى خيار النسخ بنقرة واحدة للأحرف والرموز الخاصة.
مرجع اختصارات لوحة المفاتيح
ابحث في الاختصارات الافتراضية الموثقة لـ VS Code وChrome وBash مع GNU Readline على macOS وWindows وLinux.
مدقق البريد الإلكتروني
تحقق من عنوان بريد إلكتروني: فحص صياغة RFC 5322، واستعلام حي عن سجل MX، بالإضافة إلى تفاصيل الجزء المحلي والنطاق والطول. لا يتم إرسال أي بريد.
مولد EditorConfig
أنشئ ملف .editorconfig بقواعد نمط المسافة البادئة وحجمها ونهاية السطر ومجموعة الأحرف والمسافات البيضاء، لتنسيق موحّد عبر بيئات التطوير المتكاملة (IDEs) والمحررات.
منسق HTML
نسّق HTML محلياً في المتصفح بمسافة بادئة من مسافتين أو أربع مسافات. لا يُرفع HTML ولا يُتحقق منه.
الأداة متاحة بلغات أخرى
- JSON ke Dataclass Python [ID]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON a Dataclass de Python [ES]
- JSON vers Dataclass Python [FR]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON naar Python-dataclass [NL]
- JSON till Python-dataklass [SV]
- JSONからPythonデータクラスへの変換 [JA]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- JSON zu Python Dataclass [DE]
- JSON do klasy danych w Pythonie [PL]
- JSON para Dataclass em Python [PT]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]
- 从 JSON 到 Python 数据类 [ZH]
- JSON to Python Dataclass [EN]