JSON からの非標準時間形式の解析
JSON データをカスタム構造にデコードするときに、日付形式の不一致が発生する可能性があります。これに対処するために、Golang はカスタム マーシャラ関数およびアンマーシャラ関数を実装するオプションを提供します。
カスタム マーシャラ関数およびアンマーシャラ関数
カスタム解析形式を指定するには、型エイリアスを使用します。
type JsonBirthDate time.Time // UnmarshalJSON translates a JSON string to a time value. func (j *JsonBirthDate) UnmarshalJSON(b []byte) error { s := strings.Trim(string(b), `"`) t, err := time.Parse("2006-01-02", s) if err != nil { return err } *j = JsonBirthDate(t) return nil } // MarshalJSON converts a time value to a JSON string. func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
このカスタム ロジックは、JSON 値が目的の形式であるかどうかを確認し、それに応じて解析します。
更新された構造と解析
カスタム型を使用するように構造体が更新され、デコードは通常どおり続行できます:
type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` } decoder := json.NewDecoder(req.Body) if err := decoder.Decode(&person); err != nil { log.Println(err) }
追加機能
便宜上、フォーマットされた日付表現を提供するために Format メソッドを追加できます。
// Format prints the date using the specified format string. func (j JsonBirthDate) Format(s string) string { t := time.Time(j) return t.Format(s) }
このカスタム マーシャリングおよびアンマーシャリングのアプローチにより、次のような場合でも JSON からの時間値を柔軟に解析できます。標準形式から逸脱しています。
以上がGolang で JSON から非標準時間形式を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。