Golang で time.Time フィールドの JSON レイアウトをカスタマイズする方法

Susan Sarandon
リリース: 2024-11-01 08:42:02
オリジナル
676 人が閲覧しました

How to Customize the JSON Layout for time.Time Fields in Golang?

Golang で time.Time の JSON レイアウトをカスタマイズする

Golang では、オブジェクトを JSON に変換するために、encoding/json.Marshal 関数がよく使用されます。ただし、デフォルト設定では、目的の JSON レイアウトと一致しない可能性があります。この記事では、デフォルトのレイアウトをオーバーライドし、JSON マーシャリング中に time.Time フィールドで使用される形式をカスタマイズするソリューションを説明します。

starttime という名前の time.Time フィールドを持つ struct があると仮定しましょう。この構造体を JSON にマーシャリングするときに、特定のカスタム レイアウトを使用したいとします。

s := {"starttime":time.Now(), "name":"ali"}
ログイン後にコピー

これを実現するには、time.Time を埋め込み、MarshalText メソッドと MarshalJSON メソッドの両方をオーバーライドするカスタム タイプを作成できます。

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

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
}</code>
ログイン後にコピー

MarshalText をオーバーライドすることで、jsonTime 型がその値をテキスト形式に変換する方法を制御し、カスタム レイアウトを指定できるようにします。さらに、MarshalJSON をオーバーライドすることで、JSON マーシャリング用の組み込み time.Time 実装の代わりにオーバーライドされたメソッドが使用されるようになります。

カスタム jsonTime 型を使用すると、希望のレイアウトを使用して s 構造体をマーシャリングできるようになりました。 :

<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)
}</code>
ログイン後にコピー

これにより、time.Kitchen レイアウトに従ってフォーマットされた starttime フィールドを持つ JSON 文字列が生成されます。

以上がGolang で time.Time フィールドの JSON レイアウトをカスタマイズする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!