ホームページ > バックエンド開発 > Golang > Go で「time.Time」の JSON マーシャリングをカスタマイズするにはどうすればよいですか?

Go で「time.Time」の JSON マーシャリングをカスタマイズするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-02 03:09:30
オリジナル
899 人が閲覧しました

How can I customize JSON marshaling for `time.Time` in Go?

Time.Time の JSON マーシャリングのカスタマイズ

Go では、encoding/json パッケージの汎用マーシャル関数が time.Time 値を次のようにシリアル化します。デフォルトの ISO 8601 形式を使用する文字列。ただし、タイム マーシャリングに使用されるレイアウトをオーバーライドすることで、この動作をカスタマイズすることは可能です。

次の構造体を検討してください:

<code class="go">type MyStruct struct {
    StartTime time.Time
    Name      string
}</code>
ログイン後にコピー

MyStruct を JSON にマーシャリングするときにカスタマイズされた時間レイアウトを使用するには、 MarshalText メソッドと MarshalJSON メソッドをオーバーライドするカスタム構造体に time.Time 型を埋め込むことができます。以下に例を示します。

<code class="go">import (
    "encoding/json"
    "time"
)

type CustomTime struct {
    time.Time
    Layout string
}

func (ct CustomTime) MarshalText() ([]byte, error) {
    return []byte(ct.Format(ct.Layout)), nil
}

func (ct CustomTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + ct.Format(ct.Layout) + `"`), nil
}</code>
ログイン後にコピー

このカスタム タイプでは、time.Time を埋め込み、目的のレイアウト文字列を指定するための追加の Layout フィールドを追加しました。 MarshalText メソッドと MarshalJSON メソッドをオーバーライドすることで、時間フィールドの書式設定を制御できます。

構造体で CustomTime を使用するには、time.Time フィールドを CustomTime フィールドに置き換え、目的のレイアウトで Layout フィールドを初期化します。弦。例:

<code class="go">type CustomMyStruct struct {
    StartTime CustomTime
    Name      string
}

func main() {
    s := CustomMyStruct{
        StartTime: CustomTime{
            Time:   time.Now(),
            Layout: "2006-01-02 15:04:05",
        },
        Name: "ali",
    }

    data, err := json.Marshal(s)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(data))
}</code>
ログイン後にコピー

このコードは、指定された時間レイアウトを使用して、MyStruct インスタンスを JSON としてシリアル化します。

以上がGo で「time.Time」の JSON マーシャリングをカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート