Golang でオーバーライドを使用して時間フィールドの JSON マーシャリングをカスタマイズする
Go では、エンコーディング/json のマーシャル関数により、データ構造を変換する簡単な方法が提供されますJSONに変換します。ただし、time.Time フィールドにはデフォルトのレイアウトが使用されます。この記事では、このレイアウトをオーバーライドしてカスタム形式を使用する方法について説明します。
次の構造体について考えます。
<code class="go">type Person struct { age int name string dob time.Time }</code>
デフォルトでは、この構造体をマーシャリングすると、dob フィールドが RFC3339 レイアウトに変換されます。常に望ましいとは限りません。
デフォルトのレイアウトをオーバーライドするには、time.Time を埋め込んで MarshalJSON を実装するカスタム タイプを使用できます。
<code class="go">type CustomTime struct { time.Time } func (t CustomTime) MarshalJSON() ([]byte, error) { return []byte(`"` + t.Format("my_custom_layout") + `"`), nil }</code>
ここで、time.Time を CustomTime に置き換えます。パーソン構造体内:
<code class="go">type Person struct { age int name string dob CustomTime }</code>
この変更された パーソン 構造体をマーシャリングすると、カスタム レイアウトが dob フィールドに適用されます。
例:
<code class="go">package main import ( "encoding/json" "fmt" "time" ) type Person struct { age int name string dob CustomTime } func main() { dob := time.Now() p := Person{25, "John Doe", CustomTime{dob}} jsonBytes, err := json.Marshal(p) if err != nil { fmt.Println(err) return } fmt.Println(string(jsonBytes)) }</code>
出力: {"age":25,"name":"John Doe","dob":"2023-03-08T14:41:21 00:00"}
この内たとえば、カスタム レイアウトは「my_custom_layout」ですが、これは Person 構造体には存在しません。代わりに、CustomTime の MarshalJSON メソッドで直接指定しました。
このカスタマイズにより、Marshal 関数を使用するときに time.Time フィールドのレイアウトを制御できるようになり、JSON 表現に対する柔軟性と制御が提供されます。
以上がGolang で時間フィールドの JSON マーシャリングをカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。