ホームページ >バックエンド開発 >Golang >JSON マーシャリングでゼロ値の時刻フィールドを適切に省略するにはどうすればよいですか?

JSON マーシャリングでゼロ値の時刻フィールドを適切に省略するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-27 12:19:10355ブラウズ

How to Properly Omit Zero-Value Time Fields in JSON Marshaling?

省略タグを使用した時間フィールドの JSON マーシャリングのカスタマイズ

時間フィールドで JSON を利用する場合の課題の 1 つは、時間フィールドを使用するときにそれらが確実に省略されるようにすることです。設定されていません。 json:",omitempty" タグを使用しているにもかかわらず、値がゼロの time.Time フィールドを除外するという望ましい結果が発生しない可能性があります。

この動作を理解するには、値が "0" であることを認識することが重要です。構造体の場合は、他のデータ型とは異なります。構造体の場合、ゼロ値は、すべてのフィールドにそれぞれのゼロ値が含まれる有効な構造インスタンスを表し、空の値とは区別されます。

この課題の解決策は、time.Time フィールドをポインターに変換することです。 Nil ポインターは、JSON マーシャリングおよびアンマーシャリング中に本質的に「空」として扱われ、ゼロ値の時間フィールドが省略される問題を回避します。

type MyStruct struct {
    Timestamp *time.Time `json:",omitempty"`
    Date      *time.Time `json:",omitempty"`
    Field     string     `json:",omitempty"`
}

時間フィールドにポインターを使用することで、効果的に望ましい結果を達成できます。

ts := time.Date(2015, 9, 18, 0, 0, 0, 0, time.UTC)
ms := MyStruct{
    Timestamp: &ts,
    Field:     "",
}

このソリューションは目的の JSON を生成しますOutput:

{"Timestamp":"2015-09-18T00:00:00Z"}

あるいは、ポインターを利用するように構造体を変更することが望ましくない場合は、カスタムのマーシャラーおよびアンマーシャラー インターフェイスを実装すると、time.Time フィールドの JSON マーシャリングおよびアンマーシャリングの動作を調整する手段が提供されます。 Time.IsZero() メソッドを利用すると、ゼロ値に基づいて time.Time フィールドを除外するかどうかを正確に制御できます。

以上がJSON マーシャリングでゼロ値の時刻フィールドを適切に省略するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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