Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Custom Unmarshal Non-Standard Format Masa JSON dalam Go?

Bagaimana untuk Custom Unmarshal Non-Standard Format Masa JSON dalam Go?

DDD
DDDasal
2024-11-16 14:48:02461semak imbas

How to Custom Unmarshal Non-Standard JSON Time Formats in Go?

Custom Un/Marshaling untuk Format Masa JSON Bukan Standard

Apabila berurusan dengan data JSON yang mengandungi nilai masa dalam format bukan standard, penyahkod JSON terbina dalam mungkin menghadapi ralat. Untuk mengendalikan situasi sedemikian, fungsi marshal dan unmarshal tersuai boleh dilaksanakan.

Pertimbangkan JSON berikut:

{
    "name": "John",
    "birth_date": "1996-10-07"
}

Dan struct Go yang dikehendaki:

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}

Menggunakan penyahkod JSON standard akan mengakibatkan ralat semasa menghuraikan medan "birth_date". Untuk menyesuaikan tingkah laku ini, alias jenis boleh dibuat dan ditambah pada struct:

type JsonBirthDate time.Time

Kemudian, fungsi marshal dan unmarshal tersuai dilaksanakan:

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

func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

Dengan fungsi tersuai ini, JSON kini boleh dinyahkodkan ke dalam struct Go seperti yang dimaksudkan:

person := Person{}

decoder := json.NewDecoder(req.Body);

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

// Print the birth date using the Format function
fmt.Println(person.BirthDate.Format("2006-01-02"))

Atas ialah kandungan terperinci Bagaimana untuk Custom Unmarshal Non-Standard Format Masa JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn