UTILS.
‎100%‎ داخل المتصفح
🐍

من JSON إلى نموذج Pydantic

حوّل عيّنة JSON إلى أصناف نموذج Pydantic v2 في بايثون، مع مفاتيح لمُخرَجات @dataclass أو TypedDict وترميز أسماء الحقول بأسلوب snake_case.

المخرج

حول هذه الأداة

تحوّل أداة من JSON إلى نموذج Pydantic عيّنة JSON ملصوقة إلى أصناف نموذج بايثون. يُنشئ مطوّرو بايثون وFastAPI باستمرار نماذج Pydantic من استجابات API نموذجية، وهذا المحوّل يفعل ذلك فورًا في المتصفح. يحلّل JSON الخاص بك، ويستنتج أنواع بايثون بشكل تكراري، ويصدر صنفًا واحدًا لكل كائن: تصبح السلاسل str، وسلاسل التاريخ والوقت بصيغة ISO تصبح datetime، وسلاسل التاريخ فقط تصبح date، والأعداد الصحيحة int، والأرقام الأخرى float، والقيم المنطقية bool، والمصفوفات List[T]، والكائنات المتداخلة أصناف نموذج خاصة بها مسمّاة بأسلوب PascalCase.

كل التحليل والتوليد يحدث محليًا باستخدام JSON.parse وجافاسكريبت عادية، لذا لا يغادر شيء تلصقه جهازك. تُصدَر أصناف الأبناء قبل الأصناف التي تشير إليها (ترتيب طوبولوجي)، ولا يستورد الرأس سوى ما يُستخدَم فعليًا — BaseModel وField من pydantic، وOptional / List / Union / Any من typing، وdatetime / date عند الحاجة. تُضمَّن from __future__ import annotations دائمًا كي تعمل المراجع الأمامية بغضّ النظر عن الترتيب.

المفاتيح الغائبة من بعض الكائنات الشقيقة، أو التي تُرى كـ null، تصبح Optional[T] = None. يبدّل مفتاح وضع المُخرَج بين Pydantic v2 BaseModel (الافتراضي)، وstdlib @dataclass، وtyping.TypedDict. فعّل حقول snake_case لإعادة تسمية مفاتيح camelCase أو غير الصالحة وإضافة Field(alias="originalKey") تلقائيًا كي يظل النموذج يحلّل JSON الأصلي. انسخ الشيفرة أو نزّلها كملف .py.

الأسئلة الشائعة

أي أنواع بايثون تُستنتَج؟
string إلى str، وتاريخ ووقت ISO إلى datetime، وتاريخ فقط إلى date، وعدد صحيح إلى int، ورقم غير صحيح إلى float، وقيمة منطقية إلى bool، ومصفوفة إلى List[T] حيث تُدمَج T من العناصر، وكائن إلى صنف BaseModel متداخل. القيم null أو الغائبة تصبح Optional[T] = None.
هل يمكنني الحصول على dataclass أو TypedDict بدلًا من ذلك؟
نعم. يُصدِر مفتاح وضع المُخرَج Pydantic v2 BaseModel (الافتراضي)، أو stdlib @dataclass مع استيراد dataclasses، أو صنف typing.TypedDict. استنتاج الأنواع نفسه؛ يتغيّر فقط هيكل الصنف والاستيرادات.
كيف تُعالَج المفاتيح غير المُعرّفة أو بأسلوب camelCase؟
عند تفعيل حقول snake_case، يصبح مفتاح مثل userName هو user_name إضافة إلى Field(alias="userName") كي يظل يتنقّل ذهابًا وإيابًا. المفاتيح التي هي كلمات محجوزة في بايثون أو مُعرّفات غير صالحة تُرمَّز دائمًا كي تكون الشيفرة المولَّدة صالحة.
هل تُرتَّب الأصناف بشكل صحيح؟
نعم. تُصرَّح أصناف الأبناء المتداخلة قبل الأصناف الأمّ التي تستخدمها، وتُضمَّن from __future__ import annotations، فتُصرَّف النماذج دون أخطاء مراجع أمامية.

المزيد من الأدوات