Go の JSON マーシャリングで Time.Time フィールドのレイアウトをカスタマイズする方法

Patricia Arquette
リリース: 2024-11-01 05:24:27
オリジナル
801 人が閲覧しました

How to Customize the Layout of Time.Time Fields in JSON Marshaling in Go?

JSON マーシャリングで Time.Time フィールドのレイアウトを調整する方法

Go では、encoding/json Marshal 関数が一般的な方法を提供しますデータ構造を JSON 形式にエンコードします。 time.Time フィールドをマーシャリングする場合、通常はデフォルトのレイアウトが使用されます。ただし、時間の書式設定に使用されるレイアウトをカスタマイズする必要があるシナリオが存在する可能性があります。

次の例を考えてみましょう。

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

Marshal を使用して を JSON にエンコードするには、通常、次の呼び出しを行います。 :

<code class="go">json.Marshal(s)</code>
ログイン後にコピー

ただし、「開始時間」フィールドに特定のレイアウトを使用したい場合があります。これを実現するには、「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>
ログイン後にコピー

jsonTime 構造体には time.Time 型が埋め込まれ、メソッドへのアクセスが維持されます。 format() メソッドは、f レイアウト文字列を使用して、カスタム形式の時間値の文字列表現を返します。

Marshal で使用されるデフォルトのレイアウトをオーバーライドするには、jsonTime:

<code class="go">func (j jsonTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + j.format() + `"`), nil
}</code>
ログイン後にコピー
これにより、JSON 出力の starttime フィールドが指定されたレイアウトに従ってフォーマットされるようになります。

最後に、jsonTime 型を利用して希望のレイアウトを実現できます。

<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>
ログイン後にコピー
jsonTime 型とそのカスタム書式設定の実装を採用することで、time.Time フィールドのエンコーディング/json のマーシャル関数によって使用されるレイアウトを効果的に制御できます。

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

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