Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyesuaikan Reka Letak Medan Masa. Masa dalam JSON Marshaling dalam Go?

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

Patricia Arquette
Patricia Arquetteasal
2024-11-01 05:24:27802semak imbas

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>

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

<code class="go">json.Marshal(s)</code>

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>

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>

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>

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!

Kenyataan:
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