Time.Time の JSON マーシャリングのカスタマイズ
Go では、encoding/json パッケージの汎用マーシャル関数が time.Time 値を次のようにシリアル化します。デフォルトの ISO 8601 形式を使用する文字列。ただし、タイム マーシャリングに使用されるレイアウトをオーバーライドすることで、この動作をカスタマイズすることは可能です。
次の構造体を検討してください:
<code class="go">type MyStruct struct { StartTime time.Time Name string }</code>
MyStruct を JSON にマーシャリングするときにカスタマイズされた時間レイアウトを使用するには、 MarshalText メソッドと MarshalJSON メソッドをオーバーライドするカスタム構造体に time.Time 型を埋め込むことができます。以下に例を示します。
<code class="go">import ( "encoding/json" "time" ) type CustomTime struct { time.Time Layout string } func (ct CustomTime) MarshalText() ([]byte, error) { return []byte(ct.Format(ct.Layout)), nil } func (ct CustomTime) MarshalJSON() ([]byte, error) { return []byte(`"` + ct.Format(ct.Layout) + `"`), nil }</code>
このカスタム タイプでは、time.Time を埋め込み、目的のレイアウト文字列を指定するための追加の Layout フィールドを追加しました。 MarshalText メソッドと MarshalJSON メソッドをオーバーライドすることで、時間フィールドの書式設定を制御できます。
構造体で CustomTime を使用するには、time.Time フィールドを CustomTime フィールドに置き換え、目的のレイアウトで Layout フィールドを初期化します。弦。例:
<code class="go">type CustomMyStruct struct { StartTime CustomTime Name string } func main() { s := CustomMyStruct{ StartTime: CustomTime{ Time: time.Now(), Layout: "2006-01-02 15:04:05", }, Name: "ali", } data, err := json.Marshal(s) if err != nil { panic(err) } fmt.Println(string(data)) }</code>
このコードは、指定された時間レイアウトを使用して、MyStruct インスタンスを JSON としてシリアル化します。
以上がGo で「time.Time」の JSON マーシャリングをカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。