Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengendalikan Format Masa Bukan RFC 3339 dalam JSON Unmarshaling Go?

Bagaimana Mengendalikan Format Masa Bukan RFC 3339 dalam JSON Unmarshaling Go?

Patricia Arquette
Lepaskan: 2025-01-01 09:28:11
asal
847 orang telah melayarinya

How to Handle Non-RFC 3339 Time Formats in Go's JSON Unmarshaling?

JSON Unmarshaling Format Masa Bukan RFC 3339 dalam Go

Gelagat lalai pakej pengekodan/json dalam Go adalah untuk mengawal dan nilai masa unmarshal dalam format RFC 3339. Walau bagaimanapun, bagaimana jika anda menemui data JSON dengan nilai masa dalam format yang berbeza?

Penyelesaian dengan Transformasi Manual

Satu pendekatan ialah menyahsiri nilai masa menjadi rentetan, mengubahnya secara manual menjadi format RFC 3339, dan kemudian gunakan json.Unmarshal sekali lagi. Semasa kaedah ini berfungsi, ia memperkenalkan overhed pemprosesan tambahan dan kod kekacauan.

Jenis Masa Tersuai

Penyelesaian yang lebih elegan adalah dengan melaksanakan json.Marshaler dan json.Unmarshaler antara muka pada jenis masa tersuai. Ini membenarkan pengendalian tersuai bagi siri dan penyahsirilan nilai masa.

Contoh Pelaksanaan

Berikut ialah contoh jenis masa tersuai bernama 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 masa tersuai ini:

  • Pengendalian UnmarshalJSON penyahserialisasian format masa bukan RFC 3339 ke dalam jenis CustomTime.
  • MarshalJSON mengendalikan siri nilai CustomTime ke dalam format tersuai.
  • IsSet menyediakan cara untuk menyemak sama ada CustomTime telah sebenarnya ditetapkan.

Penggunaan

Kini, anda boleh menggunakan jenis CustomTime dalam kod penyahserikatan JSON anda:

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

Pendekatan ini membenarkan anda mengendalikan format masa bukan RFC 3339 dalam data JSON dengan elegan dan cekap tanpa menjejaskan fleksibiliti. Ia juga mempamerkan kuasa melaksanakan antara muka json.Marshaler dan json.Unmarshaler tersuai untuk mengendalikan pensirilan dan penyahsirilan jenis data.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Format Masa Bukan RFC 3339 dalam JSON Unmarshaling 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan