محول JSON إلى Dart

خطوة 1 / 333%

أنشئ فئات نماذج Dart بلا تبعيات من كائن JSON أو مصفوفة من عينات الكائنات. يدمج المحول جميع عناصر العينة، وينشئ فئات متداخلة، ويحافظ على مفاتيح JSON الأصلية، وينتج أنواع حقول سليمة وآمنة من null مع مُنشئ المصنع fromJson. أضف دوال toJson عندما تحتاج إلى مخرجات متوافقة مع jsonEncode. تظل العينة والكود الناتج داخل هذا المتصفح، ولا يُرفعان إلى الخادم ولا يُضافان إلى عنوان URL.

كيف تعمل

  1. 1

    ألصق عينة ممثلة

    استخدم كائن JSON واحدًا أو مصفوفة من الكائنات. تساعد العناصر المتعددة على اكتشاف الحقول المفقودة والقابلة للقيمة null والمختلطة الأنواع.

  2. 2

    اختر خيارات Dart

    سمِّ الفئة الرئيسية، وحدد ما إذا كانت جميع الحقول قابلة للقيمة null، وأضف دوال toJson عند الحاجة.

  3. 3

    راجع وصدّر

    تحقق من الفئات المستنتجة، ثم انسخ الكود أو نزّل ملف models.dart محليًا.

كيف يتحول JSON إلى نماذج Dart آمنة من null

توضح وثائق dart:convert الرسمية أن jsonDecode() ينتج قيمًا متوافقة مع JSON، مثل الأرقام والنصوص والقيم المنطقية وnull والقوائم والخرائط ذات المفاتيح النصية. لا يمكن ترميز فئة نموذج مباشرةً إلى JSON، لكن jsonEncode() يستطيع استدعاء دالة toJson() الخاصة بها. ينشئ هذا المحول نمط التسلسل اليدوي هذا من دون إضافة تعليقات json_serializable أو تبعيات حزم.

لنفترض أن العينة تحتوي على مستخدم له عنوان متداخل. سيحتوي User الناتج على حقول final ومُنشئ بمعاملات مسماة. تحوّل User.fromJson(Map<String, Object?> json) القيم البسيطة وتستدعي UserAddress.fromJson() للكائن المتداخل. إذا كان address مفقودًا أو كانت قيمته null في أي كائن من العينة، يصبح نوعه UserAddress? ويتحقق المصنع من null قبل إنشائه. عند تفعيل toJson، تتحول النماذج المتداخلة بشكل متكرر إلى خرائط يقبلها jsonEncode().

ما تمت ملاحظته في JSON نوع Dart الناتج
عدد صحيح int
عدد عشري double
عينات صحيحة وعشرية num
نص String
قيمة منطقية bool
كائن متداخل فئة نموذج منشأة
مصفوفة متجانسة List<T>
مصفوفة متداخلة فارغة أو غير متوافقة List<Object?>
قيم null فقط أو قيم متعارضة Object?

يفحص المحول كل كائن في المصفوفة الرئيسية بدل الاعتماد على العنصر الأول فقط. يصبح الحقل قابلًا للقيمة null إذا كان مفقودًا من أحد العناصر أو كانت قيمته null صراحةً. ويمكنك أيضًا جعل كل الحقول قابلة للقيمة null عندما تكون واجهة API الفعلية أقل قابلية للتوقع من العينة. يوضح دليل الأمان من null في Dart أن الأنواع غير قابلة للقيمة null افتراضيًا وتحتاج إلى ? لقبول null.

معالجة المعرّفات وحدود الاستنتاج

لا يلزم أن تكون مفاتيح JSON أسماء أعضاء صالحة في Dart. تُحذف علامات الترقيم، وتتحول الكلمات إلى lowerCamelCase، وتحصل الكلمات المحجوزة على لاحقة آمنة، وتحصل التصادمات على لواحق رقمية ثابتة. يظل المفتاح الأصلي بلا تغيير في json['original-key'] وفي خريطة toJson(). تستخدم أسماء الفئات المتداخلة المسار الكامل، حتى لا تُدمج كائنات عناوين غير مرتبطة في فئة واحدة من دون قصد.

لا تستطيع عينة واحدة إثبات عقد API كامل. لا تُفسر نصوص JSON تلقائيًا على أنها تواريخ أو UUID أو enums، ولا توفر المصفوفة الفارغة نوعًا لعناصرها. كذلك لا يمكن ضمان سلامة أسماء أعضاء الكائن المكررة عند التحويل ذهابًا وإيابًا، لأن محللات JSON تحتفظ عادةً بالقيمة الأخيرة. راجع النماذج الناتجة مقابل وثائق API أو مخططها قبل استخدامها في الإنتاج. تحد الأداة من حجم الإدخال وعمق التداخل وعدد التعريفات المستنتجة وحجم المخرجات لإبقاء عمل المتصفح ضمن حدود آمنة.

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

لا. تحدث عملية التحليل والاستنتاج وإنشاء الكود والنسخ والتنزيل في متصفحك. لا تُرسل بيانات JSON ولا كود Dart الناتج إلى خوادمنا ولا يوضعان في عنوان URL.

نعم. يستخدم Flutter لغة Dart، لذلك يمكن استعمال هذه الفئات الخالية من التبعيات في مشروع Flutter. راجع الأنواع المستنتجة مقابل عقد API الفعلي أولًا.

لا. تنشئ دوال fromJson وtoJson اختيارية يدويًا من دون الاعتماد على حزمة أو build_runner.

يصبح الحقل الذي تظهر قيمته null أو يكون مفقودًا قابلًا للقيمة null. ويمكنك اختيار جعل جميع الحقول الناتجة قابلة للقيمة null إذا لم تكن العينة ممثلة للبيانات الفعلية.

لا. تعكس النتيجة القيم التي شوهدت فقط. استخدم عدة عينات من الكائنات وقارن النتيجة بمخطط المزوّد أو وثائقه.

أدوات ذات صلة

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