YamlBox

مولدات الكود · 50دقيقة قراءة

JSON to Go: بنيات يتم فك تنظيمها من المحاولة الأولى

Go يجعلك تكتب شكل JSON الذي تقوم بفك تشفيره، والمترجم يبقيك عليه. يؤدي تحويل JSON to Go من استجابة حقيقية إلى إزالة كل من الكتابة والتخمين: تصل أسماء الحقول وعلامات `json` والأنواع المتداخلة بشكل صحيح، ويمكنك الانتقال مباشرة إلى الجزء من البرنامج الذي يفعل شيئًا ما بالفعل.

تم التحديث

الشكل المتولد

يقوم المحول بتحويل كل كائن إلى بنية، وكل مصفوفة إلى شريحة، ويستنتج نوع Go لكل قيمة. تصبح الكائنات المتداخلة أنواعًا مسماة بدلاً من النقط المجهولة، مما يجعل توقيع رمز فك التشفير الخاص بك قابلاً للقراءة:

                type Container struct {
  Name  string `json:"name"`
  Image string `json:"image"`
  Ports []struct {
    ContainerPort int `json:"containerPort"`
  } `json:"ports"`
}
              

ال`json`العلامات هي الجزء المهم. وحدة فك ترميز Go غير حساسة لحالة الأحرف عند مطابقة أسماء الحقول، ولكن`containerPort`و`ContainerPort`لا تتم المحاذاة بدون علامة، وأي مفتاح ليس معرف Go صالحًا -`app.kubernetes.io/name`، على سبيل المثال - لا يمكن مطابقته على الإطلاق بدون واحد.

الأرقام والأصفار والفخاخين الكلاسيكيين

  • الأرقام - يُنتج الاستدلال `int` للقيم الكاملة، لكن JSON لا يحتوي على نوع عدد صحيح. الحقل الذي يبلغ `3` اليوم قد يصبح `3.5` غدًا، لذا تكون المعرفات والأموال أكثر أمانًا مثل `float64` أو `string` أو `json.Number` حسب احتياجاتك.
  • القيم الخالية - المفتاح الذي يمكن أن يكون `null` يجب أن يكون مؤشرًا (`*string`) حتى تتمكن من التمييز بين "غائب" و"فارغ".
  • الطوابع الزمنية - يتم فك تشفير سلسلة RFC 3339 بشكل نظيف إلى `time.Time`; رقم عصر Unix لا يحدث ذلك، لذا احتفظ به كـ `int64` وقم بتحويله بشكل صريح.
  • الحقول غير المعروفة — `json.Decoder` تتجاهل الإضافات بشكل افتراضي؛ استخدم `DisallowUnknownFields` عندما تفضل الفشل بصوت عالٍ.

أنشئ من إجابتين أو ثلاث استجابات عندما تستطيع ذلك. الحقول التي تكون مفقودة في بعض الأحيان تصبح مؤشرات، ومن الأسهل بكثير اتخاذ هذا القرار من الأدلة بدلاً من الذاكرة.

من الهيكل إلى رمز العمل

مع وجود الهياكل في مكانها الصحيح، يكون فك التشفير عبارة عن ثلاثة أسطر ويقوم المترجم بفرض مسارات الوصول من هناك. النمط الشائع هو فك التشفير في البنية التي تم إنشاؤها، ثم تعيينها في نوع المجال الخاص بك بحيث يمكن تغيير شكل JSON دون التمدد عبر التطبيق. قم بوضع علامة على الملف الذي تم إنشاؤه بنقطة النهاية التي جاء منها، وأعد الإنشاء عندما تتغير الاستجابة بدلاً من تحريره يدويًا - الكود الذي تم إنشاؤه يدويًا هو الإصدار الذي لا يجرؤ أحد على تجديده لاحقًا.

توليد محليا

عادةً ما تكون الحمولات التي تستحق إنشاء بنيات Go منها استجابات حقيقية لواجهة برمجة التطبيقات (API)، وتحمل الاستجابات الحقيقية الرموز المميزة وبيانات العميل. يحافظ تحويل JSON to Go المستند إلى المتصفح على الحمولة في علامة التبويب - بدون تحميل، ولا سؤال للاحتفاظ - مما يجعل الإنشاء من بيانات الإنتاج خطوة عادية وليس استثناءً للسياسة.

JSON للذهاب — الأسئلة المتداولة

لماذا لا تقوم بنيات Go الخاصة بي بفك تشفير JSON؟

نادرًا ما تتطابق أسماء الحقول في JSON مع أسماء Go المُصدَّرة تمامًا، لذا تحتاج البنية إلى علامات `json`. قم بإعادة الإنشاء مع تمكين العلامات، وتأكد من تهجئة المفاتيح بما في ذلك علامات الترقيم، وتحقق مما إذا كان يجب على وحدة فك التشفير السماح بالحقول غير المعروفة.

هل يجب أن تكون الحقول الرقمية التي تم إنشاؤها int أو float64؟

يستخدم`float64`0`json.Number`- أوAPI1JSONعندما تكون الدقة مهمة – لأي شيء من الخارج`int`3، لأن4لا يميز الأعداد الصحيحة من الكسور العشرية. احتياطي2للقيم التي تتحكم فيها من البداية إلى النهاية.

كيف أتعامل مع حقل يكون أحيانًا فارغًا؟

اجعله نوع مؤشر مثل `*string`، والذي يقوم بتشفير كل من "المفتاح الغائب" و"المفتاح الموجود بقيمة فارغة" مع الاستمرار في السماح لك بالتحقق من القيمة الحقيقية. تصبح الحقول غير المؤشرة بصمت قيمًا صفرية بدلاً من ذلك.

الأدوات المذكورة في هذه التدوينة

تصفح القائمة الكاملة للأدوات 19

المزيد من المقالات للقراءة

60دقيقة قراءة

JSON إلى TypeScript: الأنواع المطابقة للواقع

قم بتحويل واجهات JSON إلى TypeScript من استجابة API حقيقية - مفاتيح اختيارية، وتوحيدات فارغة، وأنواع متداخلة - وامنع الأنواع التي تم إنشاؤها من الانحراف.

60دقيقة قراءة

منسق JSON: جميل ومصغر وصالح بالفعل

منسق JSON يقوم بالطباعة الجميلة والتصغير والتحقق من صحة مواقع الأخطاء الدقيقة - بالإضافة إلى الأخطاء النحوية الخمسة وراء كل خطأ JSON غير صالح تقريبًا.

جميع المشاركات 19 →