"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إلغاء تنظيم JSON المتداخل في مجموعة من الكائنات في Go؟

كيفية إلغاء تنظيم JSON المتداخل في مجموعة من الكائنات في Go؟

تم النشر بتاريخ 2024-12-21
تصفح:637

How to Unmarshal Nested JSON into an Array of Objects in Go?

كشف تنظيم JSON المتداخل في مجموعة من الكائنات في Go

المشكلة

خذ بعين الاعتبار بيانات JSON التالية:

{
   "1001":{
      "level":10,
      "monster-id":1001,
      "skill-level":1,
      "aimer-id":301
   },
   "1002":{
      "level":12,
      "monster-id":1002,
      "skill-level":1,
      "aimer-id":302
   },
   "1003":{
      "level":16,
      "monster-id":1003,
      "skill-level":2,
      "aimer-id":303
   }
}

الهدف هو إلغاء تنظيم JSON هذا في مجموعة من كائنات Monster.

type Monster struct {
    MonsterId  int32
    Level      int32
    SkillLevel int32
    AimerId    int32
}

الحل

لتحقيق ذلك، اتبع الخطوات التالية:

  1. تعريف MonsterCollection: قم بإنشاء نوع MonsterCollection لحمل خريطة Monster كائنات ذات مفاتيح سلسلة.
type MonsterCollection struct {
    Pool map[string]Monster
}
  1. تنفيذ طريقة FromJson: حدد طريقة FromJson على نوع MonsterCollection للتعامل مع عملية إلغاء التنظيم.
func (mc *MonsterCollection) FromJson( سلسلة jsonStr) خطأ { بيانات فار *خريطة[سلسلة]Monster ب := [] بايت (jsonStr) إرجاع json.Unmarshal(b, &data)
func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data *map[string]Monster
    b := []byte(jsonStr)
    return json.Unmarshal(b, &data)
}
    استخدام بيانات var *map[string]Monster يتجنب استخدام الواجهة{}، مما يضمن أن الخريطة الناتجة لها النوع المطلوب.
  • تمرير البيانات كمؤشر يضمن ذلك تنعكس التغييرات التي تم إجراؤها أثناء إلغاء التنظيم في حقل تجمع MonsterCollection.
  1. تصحيح نوع المفتاح في Pool: قم بتغيير نوع المفتاح لخريطة Pool إلى سلسلة لمطابقة المفاتيح الموجودة في بيانات JSON.
  2. استخدم علامات البنية: أضف علامات بنية JSON إلى بنية Monster للتحديد أسماء الحقول في بيانات JSON.
type Monster struct { MonsterId int32 `json:"monster-id"` المستوى int32 `json:"المستوى"` SkillLevel int32 `json:"skill-level"` AimerId int32 `json:"aimer-id"`
type Monster struct {
    MonsterId  int32 `json:"monster-id"`
    Level      int32 `json:"level"`
    SkillLevel int32 `json:"skill-level"`
    AimerId    int32 `json:"aimer-id"`
}
    اتصل بـ FromJson:
  1. اتصل بطريقة FromJson باستخدام سلسلة JSON لإلغاء تنظيم البيانات في MonsterCollection.
  2. mc := new(MonsterCollection ) err := mc.FromJson(jsonStr)
func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data *map[string]Monster
    b := []byte(jsonStr)
    return json.Unmarshal(b, &data)
}
    التحقق من الأخطاء:
  1. التعامل مع أي أخطاء تم إرجاعها بواسطة FromJson لأغراض تصحيح الأخطاء.
  2. الوصول إلى الكائنات :
  3. استخدم حقل Pool في MonsterCollection للوصول إلى كائنات Monster الفردية.
  4. for المعرف، الوحش: = النطاق mc.Pool { fmt.Println (المعرف، الوحش)
for id, monster := range mc.Pool {
    fmt.Println(id, monster)
}
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3