JSON إلى Python dataclass وTypedDict
حوّل JSON إلى فئات dataclass أو TypedDict في Python مع تلميحات الأنواع وحقول Optional وفئات متداخلة معرّفة بترتيب الاعتماد. مجاني داخل المتصفح.
تُرتَّب الأصناف بحيث تأتي التبعيات أولًا. القيمة الافتراضية للحقول الاختيارية None؛ ويستخدم إخراج TypedDict النوع NotRequired (Python 3.11+).
يعمل بالكامل في متصفحك. لا يتم رفع بياناتك أبدًا.
أدوات ذات صلة
عرض الكلما هو JSON إلى Python؟
ولّد فئات Python مكتوبة الأنواع من عيّنة JSON: إما فئات @dataclass أو تعريفات TypedDict. تتحول الكائنات المتداخلة إلى فئات خاصة بها تُصدر قبل الفئات التي تستخدمها ليُستورد الملف دون أخطاء.
كيفية استخدام JSON إلى Python
- الصق عيّنة JSON في إدخال JSON (أو انقر تحميل مثال / فتح ملف).
- اضبط اسم النوع الجذر (الافتراضي
Root). - اختر نمط الإخراج:
@dataclassأوTypedDict. - انسخ شيفرة Python الناتجة أو تنزيل كملف.
مثال
{"id":1,"name":"A","tags":["x"]} from dataclasses import dataclass
from typing import List
@dataclass
class Root:
id: int
name: str
tags: List[str] متى تستخدم JSON إلى Python
استخدمه لإضافة تلميحات الأنواع لحمولات JSON في السكربتات وشيفرة FastAPI والاختبارات. لا تحوّل dataclass القواميس المتداخلة تلقائيًا؛ استخدم مكتبة مثل dacite أو pydantic لذلك، أو نمط TypedDict للإبقاء على القواميس العادية.
كيف يعمل JSON إلى Python
تُجتاز العيّنة تكراريًا ويجمع كل موضع الأنواع التي رآها. تُدمج مصفوفات الكائنات في نوع واحد: فالمفتاح الغائب من بعض العناصر يصبح اختياريًا، والمفتاح الذي يكون null في موضع ما يصبح قابلًا لـ null، والأعداد الصحيحة المختلطة بكسرية تصبح نوع الفاصلة العائمة، وأي خلط آخر للأنواع يعود إلى نوع ديناميكي. وتصبح الكائنات المتداخلة أنواعًا مسماة (PascalCase للمفتاح مع إفراد مفاتيح المصفوفات: orders ← Order) مع لواحق رقمية عند تعارض الأسماء. يستخدم ناتج Python الأنواع int وfloat وstr وbool وList[T] وOptional[T] لقيم null وAny للقيم الديناميكية. وفي dataclass تأتي الحقول المطلوبة أولًا وتحصل الاختيارية على = None؛ أما المفاتيح التي ليست معرّفات صالحة (أو كلمات محجوزة مثل class) فتُعاد تسميتها بنمط snake_case مع تعليق # JSON key. ويعلّم ناتج TypedDict المفاتيح الغائبة بـ NotRequired ويتحول إلى صيغة TypedDict("Name", {...}) الوظيفية عندما لا يكون مفتاح معرّفًا صالحًا.
حالات الاستخدام الشائعة
- إضافة تلميحات الأنواع لاستجابة JSON API لأجل mypy أو Pyright
- إنشاء dataclass لملف إعداد
- وصف حمولات webhook بـ TypedDict
- توليد نماذج أولية قبل الانتقال إلى pydantic
الأسئلة الشائعة
أي إصدار Python مطلوب؟
يعمل ناتج dataclass على Python 3.7 فما فوق. ويستخدم ناتج TypedDict الصنف NotRequired المتاح في وحدة typing من Python 3.11 (أو typing_extensions للإصدارات الأقدم).
لماذا أُعيدت تسمية بعض الحقول؟
مفاتيح مثل first-name أو class ليست أسماء سمات صالحة، فتصبح first_name / class_ مع تعليق يوضح مفتاح JSON الأصلي.
هل يمكنني تحميل JSON مباشرة في dataclass؟
يعمل Root(**data) مع البيانات المسطحة؛ أما الكائنات المتداخلة فتبقى قواميس ما لم تحوّلها بنفسك أو تستخدم مكتبة مساعدة.