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

Golang で JSON にマーシャリングするときに time.Time レイアウトをカスタマイズするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 03:55:02747ブラウズ

How can I customize the time.Time layout when marshalling to JSON in Golang?

JSON マーシャリング用の Time.Time レイアウトのカスタマイズ

Golang のエンコーディング/json パッケージでは、time.Time 値のデフォルトのレイアウトは「2006」です。 -01-02T15:04:05Z」。ただし、カスタム書式文字列を使用するようにこのレイアウトをオーバーライドすることは可能です。

解決策:

time.Time フィールドの json.Marshal で使用されるレイアウトをオーバーライドするにはでは、time.Time を埋め込み、MarshalText インターフェイスを実装する新しい型を定義できます。このインターフェイスは、値のバイト表現を返すメソッドを定義します。以下のコードは、これを実現する方法を示しています。

<code class="go">package main

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

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
}

func (j jsonTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + j.format() + `"`), nil
}

func main() {
    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>

このコードでは、jsonTime 構造体に time.Time 値が埋め込まれ、指定されたレイアウトを使用して時間を文字列として返すカスタム format() メソッドが定義されています。 。また、JSON マーシャリング中にカスタム文字列表現を返す MarshalText インターフェイスと MarshalJSON インターフェイスも実装します。

このアプローチを使用すると、JSON 出力の time.Time 値に使用されるレイアウトを制御し、特定の内容に従ってカスタマイズできます。要件。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。