Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menyesuaikan JSON Time Unmarshaling dalam Go to Handle Non-RFC 3339 Formats?

Bagaimanakah Saya Boleh Menyesuaikan JSON Time Unmarshaling dalam Go to Handle Non-RFC 3339 Formats?

Linda Hamilton
Lepaskan: 2024-12-18 21:09:13
asal
999 orang telah melayarinya

How Can I Customize JSON Time Unmarshaling in Go to Handle Non-RFC 3339 Formats?

Menyesuaikan JSON Time Unmarshaling in Go

Apabila berurusan dengan data JSON yang mengandungi nilai masa, pakej pengekodan/json dalam Go boleh mengehadkan jika format masa tidak mematuhi RFC 3339. Walaupun mungkin untuk menukar masa secara manual kepada RFC Format 3339 untuk penghuraian, terdapat pendekatan yang lebih cekap.

Laksanakan Antara Muka Marshaler/Unmarshaler

Untuk mengendalikan format masa tersuai, cipta jenis tersuai yang melaksanakan json.Marshaler dan antara muka json.Unmarshaler. Ini membolehkan anda menentukan cara nilai masa harus disiri dan dinyahsiri.

Berikut ialah contoh jenis tersuai yang dipanggil CustomTime:

type CustomTime struct {
    time.Time
}

const ctLayout = "2006/01/02|15:04:05"

func (ct *CustomTime) UnmarshalJSON(b []byte) (err error) {
    s := strings.Trim(string(b), "\"")
    if s == "null" {
        ct.Time = time.Time{}
        return
    }
    ct.Time, err = time.Parse(ctLayout, s)
    return
}

func (ct *CustomTime) MarshalJSON() ([]byte, error) {
    if ct.Time.IsZero() {
        return []byte("null"), nil
    }
    return []byte(fmt.Sprintf("\"%s\"", ct.Time.Format(ctLayout))), nil
}

var nilTime = (time.Time{}).UnixNano()
func (ct *CustomTime) IsSet() bool {
    return !ct.IsZero()
}
Salin selepas log masuk

Dalam jenis tersuai ini:

  • UnmarshalJSON menukar rentetan JSON kepada masa. Nilai masa menggunakan tersuai yang ditentukan susun atur.
  • MarshalJSON menukar nilai masa.Masa kepada rentetan JSON menggunakan reka letak tersuai yang sama.
  • IsSet ialah kaedah pilihan untuk menyemak sama ada nilai CustomTime telah ditetapkan (bukan sifar).

Penggunaan

Setelah jenis CustomTime adalah ditakrifkan, ia boleh digunakan sebagai medan struct untuk menyahsiri data JSON dengan format masa tersuai.

type Args struct {
    Time CustomTime
}

var data = `
    {
        "Time": "2014/08/01|11:27:18"
    }
`

func main() {
    a := Args{}
    fmt.Println(json.Unmarshal([]byte(data), &a))
    fmt.Println(a.Time.String())
}
Salin selepas log masuk

Contoh ini berjaya menyahsiri data JSON di mana medan Masa berada dalam adat "2006/01/02| Format 15:04:05".

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyesuaikan JSON Time Unmarshaling dalam Go to Handle Non-RFC 3339 Formats?. 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