省略タグを使用した時間フィールドの 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 サイトの他の関連記事を参照してください。