非標準の JSON 時間形式のカスタムアン/マーシャリング
非標準形式の時間値を含む JSON データを扱う場合、組み込みの JSON デコーダでエラーが発生する可能性があります。このような状況に対処するために、カスタムのマーシャル関数とアンマーシャル関数を実装できます。
次の JSON を考えてみましょう:
{ "name": "John", "birth_date": "1996-10-07" }
そして、目的の Go 構造体:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
使用標準の JSON デコーダでは、「birth_date」フィールドの解析中にエラーが発生します。この動作をカスタマイズするには、型エイリアスを作成して構造体に追加します。
type JsonBirthDate time.Time
次に、カスタム マーシャル関数とアンマーシャル関数が実装されます。
func (j *JsonBirthDate) UnmarshalJSON(b []byte) error { s := strings.Trim(string(b), `"`) // Remove quotes t, err := time.Parse("2006-01-02", s) if err != nil { return err } *j = JsonBirthDate(t) return nil } func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
これらのカスタム関数を使用して、これで、JSON を意図したとおりに Go 構造体にデコードできるようになりました:
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) } // Print the birth date using the Format function fmt.Println(person.BirthDate.Format("2006-01-02"))
以上がGo で非標準の JSON 時刻形式をカスタム アンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。