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

DDD
Lepaskan: 2024-11-16 14:48:02
asal
393 orang telah melayarinya

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"
}
Salin selepas log masuk

Dan struct Go yang dikehendaki:

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

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
Salin selepas log masuk

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))
}
Salin selepas log masuk

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"))
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan