Bagaimana untuk Menyesuaikan Reka Letak Medan Masa. Masa dalam JSON Marshaling dalam Go?

Patricia Arquette
Lepaskan: 2024-11-01 05:24:27
asal
801 orang telah melayarinya

How to Customize the Layout of Time.Time Fields in JSON Marshaling in Go?

Cara Melaraskan Reka Letak Masa. Medan Masa dalam JSON Marshaling

Dalam Go, fungsi pengekodan/json Marshal menyediakan cara generik untuk mengekod struktur data ke dalam format JSON. Apabila menyusun medan masa. Masa, ia biasanya menggunakan reka letak lalai. Walau bagaimanapun, mungkin terdapat senario di mana anda perlu menyesuaikan reka letak yang digunakan untuk pemformatan masa.

Pertimbangkan contoh berikut:

<code class="go">s := {"starttime":time.Now(), "name":"ali"}</code>
Salin selepas log masuk

Untuk mengekod s ke JSON menggunakan Marshal, anda biasanya akan memanggil :

<code class="go">json.Marshal(s)</code>
Salin selepas log masuk

Walau bagaimanapun, anda mungkin mahu menggunakan reka letak khusus untuk medan "masa mula". Untuk mencapai matlamat ini, kita boleh memanfaatkan jenis tersuai "jsonTime":

<code class="go">type jsonTime struct {
    time.Time
    f string
}

func (j jsonTime) format() string {
    return j.Time.Format(j.f)
}

func (j jsonTime) MarshalText() ([]byte, error) {
    return []byte(j.format()), nil
}</code>
Salin selepas log masuk

Struktur jsonTime membenamkan jenis masa. Masa untuk mengekalkan akses kepada kaedahnya. Kaedah format() mengembalikan perwakilan rentetan terformat tersuai bagi nilai masa menggunakan rentetan reka letak f.

Untuk mengatasi reka letak lalai yang digunakan oleh Marshal, kita boleh melaksanakan kaedah MarshalJSON untuk jsonTime:

<code class="go">func (j jsonTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + j.format() + `"`), nil
}</code>
Salin selepas log masuk

Ini memastikan bahawa medan masa mula dalam output JSON diformatkan mengikut reka letak yang ditentukan.

Akhir sekali, anda boleh menggunakan jenis jsonTime untuk mencapai reka letak yang anda inginkan:

<code class="go">jt := jsonTime{time.Now(), time.Kitchen}
x := map[string]interface{}{
    "foo": jt,
    "bar": "baz",
}
data, err := json.Marshal(x)
if err != nil {
    panic(err)
}
fmt.Printf("%s", data)</code>
Salin selepas log masuk

Dengan menggunakan jenis jsonTime dan pelaksanaan pemformatan tersuainya, anda boleh mengawal reka letak yang digunakan dengan berkesan oleh pengekodan/fungsi Marshal json untuk medan masa.

Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan Reka Letak Medan Masa. Masa dalam JSON Marshaling 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!