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 サイトの他の関連記事を参照してください。