فئة بيانات من JSON إلى بايثون

قم بلصق عينة JSON للحصول على ملف من نوع @dataclass (أو Pydantic BaseModel) يحتوي على إشارات نوع لكل حقل، str، int، float، bool، Optional[...] وList[...] عند الحاجة؛ حيث تصبح الكائنات المدمجة فئات بيانات مستقلة. يتم إخراج الناتج بصيغة PEP 8 وهو جاهز للنسخ واللصق في ملف بايثون.

كيفية تحويل بيانات JSON إلى فئة بيانات

  1. 1

    لصق بيانات JSON

    تكفي عينة واحدة؛ أما استخدام عدة عينات فيحسّن القدرة على اكتشاف الحقول التي يمكن أن تكون فارغة (null).

  2. 2

    اختر النمط

    المكتبة القياسية `@dataclass`، أو Pydantic `BaseModel`، أو `TypedDict`، وذلك فقط للتحقق من صحة الأنواع بشكل ساكن.

  3. 3

    اختر إصدار بايثون

    ٣.٩+ لصيغة `list[str]`، ٣.١٠+ لأنواع الاتحاد `|`، و٣.٨ لـ `Optional[...]`/`List[...]`.

  4. 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 يتميز بوزن أقل.

أدوات ذات صلة

الأداة متاحة بلغات أخرى