Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyesuaikan JSON Marshaling untuk Medan Masa di Golang?

Bagaimana untuk Menyesuaikan JSON Marshaling untuk Medan Masa di Golang?

Barbara Streisand
Barbara Streisandasal
2024-11-02 20:47:30904semak imbas

How to Customize JSON Marshaling for Time Fields in Golang?

Menyesuaikan JSON Marshaling untuk Medan Masa dengan Override di Golang

In Go, pengekodan/fungsi Marshal json menyediakan cara yang mudah untuk menukar struktur data ke dalam JSON. Walau bagaimanapun, ia menggunakan reka letak lalai untuk masa. Medan masa. Artikel ini meneroka cara untuk mengatasi reka letak ini untuk menggunakan format tersuai.

Pertimbangkan struct berikut:

<code class="go">type Person struct {
    age  int
    name string
    dob  time.Time
}</code>

Secara lalai, Marshaling struct ini menukar medan dob kepada reka letak RFC3339, yang mungkin tidak selalu diingini.

Untuk mengatasi reka letak lalai, kita boleh menggunakan jenis tersuai yang membenamkan masa.Masa dan melaksanakan MarshalJSON:

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

func (t CustomTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + t.Format("my_custom_layout") + `"`), nil
}</code>

Sekarang, gantikan masa.Masa dengan CustomTime dalam struct Person:

<code class="go">type Person struct {
    age  int
    name string
    dob  CustomTime
}</code>

Apabila Marshaling struct Person yang diubah suai ini, susun atur tersuai akan digunakan pada medan dob.

Contoh:

<code class="go">package main

import (
    "encoding/json"
    "fmt"
    "time"
)

type Person struct {
    age  int
    name string
    dob  CustomTime
}

func main() {
    dob := time.Now()
    p := Person{25, "John Doe", CustomTime{dob}}
    jsonBytes, err := json.Marshal(p)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(jsonBytes))
}</code>

Output: {"umur":25,"nama":"John Doe","dob":"2023-03-08T14:41:21 00:00"}

Dalam ini contoh, susun atur tersuai ialah "layout_custom_my" yang tidak terdapat dalam struct Person. Sebaliknya, kami telah menentukannya secara langsung dalam kaedah MarshalJSON CustomTime.

Penyesuaian ini membolehkan anda mengawal reka letak masa. Medan masa apabila menggunakan fungsi Marshal, memberikan fleksibiliti dan kawalan ke atas perwakilan JSON.

Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan JSON Marshaling untuk Medan Masa di Golang?. 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