Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Unmarshal JSON dengan Offset Zon Waktu yang Salah dalam Go?

Bagaimana untuk Unmarshal JSON dengan Offset Zon Waktu yang Salah dalam Go?

Susan Sarandon
Lepaskan: 2024-11-05 08:25:02
asal
979 orang telah melayarinya

How to Unmarshal JSON with Incorrect Timezone Offset in Go?

Format Datetime Tidak Sah dalam JSON Unmarshalling

Latar Belakang

JSON Unmarshaling Go mempunyai masalah dengan datetimes yang diformatkan mengikut ISO8601/RFC3339 yang mempunyai offset zon waktu format 0200 dan bukannya 02:00.

Masalah

Format JSON Salah:

2016-08-08T21:35:14.052975+0200
Salin selepas log masuk

Format Betul Dijangka:

2016-08-08T21:35:14.052975+02:00
Salin selepas log masuk

Punca Berkemungkinan:

JSON telah dijana menggunakan fungsi strftime C dengan rentetan format yang tidak termasuk titik bertindih dalam ofset zon waktu.

Penyelesaian

Untuk menyelesaikan isu ini dan mendayakan penyahmarshalan yang betul bagi kedua-dua format, jenis medan masa tersuai boleh ditakrifkan:

<code class="go">type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)

    // Remove double quotes from JSON value
    s = s[1:len(s)-1]

    t, err := time.Parse(time.RFC3339Nano, s)
    if err != nil {
        t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
    }
    self.Time = t
    return
}</code>
Salin selepas log masuk

Dalam jenis tersuai ini, kaedah UnmarshalJSON cuba untuk menghuraikan rentetan mengikut kedua-dua RFC3339Nano (dengan titik bertindih dalam offset zon waktu) dan versi RFC3339Nano yang diubah suai tanpa titik bertindih.

Penggunaan

Untuk menggunakan jenis medan masa tersuai:

<code class="go">type Test struct {
    Time MyTime `json:"time"`
}</code>
Salin selepas log masuk

Struktur ini kemudiannya boleh dinyahmarshal daripada format JSON dengan zon waktu yang salah atau betul diimbangi.

Nota

  • Secara lalai, format RFC3339Nano mengikut masa. Parse menggunakan "Z" untuk mengimbangi zon waktu, manakala dalam format yang diubah suai, "Z0700" digunakan.
  • Tahun "2006" dalam format masa adalah merujuk kepada tahun pertama keluaran Go.

Atas ialah kandungan terperinci Bagaimana untuk Unmarshal JSON dengan Offset Zon Waktu yang Salah 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan