Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyahkod JSON dengan Format Masa Bukan Standard?

Bagaimana untuk Menyahkod JSON dengan Format Masa Bukan Standard?

Patricia Arquette
Lepaskan: 2024-11-09 08:37:02
asal
712 orang telah melayarinya

How to Decode JSON with Non-Standard Time Formats?

Custom Unmarshal for Non-Standard JSON Time Format

Untuk menyahkod JSON dengan format masa bukan standard ke dalam struct tersuai, fungsi marshal dan unmarshal terbina dalam memberikan fleksibiliti.

Pertimbangkan JSON berikut:

{
    "name": "John",
    "birth_date": "1996-10-07"
}
Salin selepas log masuk

Dan struct tersuai untuk menyimpan data:

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

Menyahkod JSON ini menggunakan penyahkod lalai gagal kerana bukan -format masa standard. Untuk mengendalikan ini, laksanakan fungsi marshal dan unmarshal tersuai:

type JsonBirthDate time.Time

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
}

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

Dengan menambahkan JsonBirthDate pada struct Person dan melaksanakan fungsi ini, kod berikut akan menyahkod JSON dengan betul:

person := Person{}
decoder := json.NewDecoder(req.Body)
err := decoder.Decode(&person)
if err != nil {
    log.Println(err)
}
// person.BirthDate now contains the parsed time as a time.Time object
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menyahkod JSON dengan Format Masa Bukan Standard?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan