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

كيفية تحليل تنسيقات الوقت غير القياسية من JSON في Golang؟

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

How to Parse Non-Standard Time Formats from JSON in Golang?

تحليل تنسيق الوقت غير القياسي من JSON

عند فك تشفير بيانات JSON في بنية مخصصة، يمكن أن تنشأ تناقضات في تنسيقات التاريخ. لمعالجة هذه المشكلة، يوفر Golang خيار تنفيذ وظائف التنظيم وإلغاء التنظيم المخصصة.

وظائف التنظيم وإلغاء التنظيم المخصصة

لتحديد تنسيق تحليل مخصص، يتم استخدام الاسم المستعار للنوع. تم إنشاؤها لحقل الوقت، ويتم تنفيذ واجهات Marshaler وUnmarshaler على النحو التالي:

type JsonBirthDate time.Time

// UnmarshalJSON translates a JSON string to a time value.
func (j *JsonBirthDate) UnmarshalJSON(b []byte) error {
    s := strings.Trim(string(b), `"`)
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        return err
    }
    *j = JsonBirthDate(t)
    return nil
}

// MarshalJSON converts a time value to a JSON string.
func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

يتحقق هذا المنطق المخصص مما إذا كانت قيمة JSON بالتنسيق المطلوب ويوزعها وفقًا لذلك.

الهيكل المحدث والتحليل

البنية هي تم التحديث لاستخدام النوع المخصص، ويمكن متابعة فك التشفير كالمعتاد:

type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}

decoder := json.NewDecoder(req.Body)
if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}

ميزات إضافية

للراحة، يمكن إضافة طريقة تنسيق لتوفير تمثيل منسق للتاريخ:

// Format prints the date using the specified format string.
func (j JsonBirthDate) Format(s string) string {
    t := time.Time(j)
    return t.Format(s)
}

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

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3