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

كيفية تخصيص JSON Unmarshaling باستخدام String Split في Go؟

تم النشر بتاريخ 2024-11-01
تصفح:310

How to Customize JSON Unmarshaling with String Split in Go?

إلغاء تنظيم مخصص مع تقسيم السلسلة في Go

عند التعامل مع بيانات JSON، غالبًا ما تنشأ الحاجة إلى تحويل أو تخصيص عملية إلغاء التنظيم لأهداف محددة أنواع البيانات. في هذه الحالة، نريد تقسيم سلسلة JSON التي تحتوي على قيم مفصولة بفواصل إلى شريحة سلسلة [] أثناء إلغاء التنظيم.

ولتحقيق ذلك، فلننفذ أداة إلغاء تنظيم مخصصة لنوع السلسلة []:

type strslice []string

func (ss *strslice) UnmarshalJSON(data []byte) error {
    var s string
    if err := json.Unmarshal(data, &s); err != nil {
        return err
    }
    *ss = strings.Split(s, "-")
    return nil
}

يأخذ برنامج إلغاء التنظيم المخصص هذا بيانات JSON الأولية كمدخلات ويحولها إلى شريحة من السلاسل عن طريق تقسيمها على المحدد المحدد ("-" في هذه الحالة).

في النسخة الأصلية لدينا struct، يمكننا الآن استخدام هذا النوع المخصص لحقل الموضوعات:

type Student struct {
    StudentNumber int      `json:"student_number"`
    Name          string   `json:"name"`
    Subjects      strslice `json:"subjects"`
}

يسمح لنا هذا بإلغاء تنظيم بيانات JSON مباشرة في البنية، مع تقسيم حقل الموضوعات تلقائيًا إلى سلاسل فردية:

json := `{"student_number":1234567, "name":"John Doe", "subjects":"Chemistry-Maths-History-Geography"}`
var s Student
if err := json.Unmarshal([]byte(json), &s); err != nil {
    panic(err)
}
fmt.Println(s) // Output: {1234567 John Doe [Chemistry Maths History Geography]}
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3