JSON からの非標準時間形式のデコード
標準時間以外の形式を含む JSON データを扱う場合、標準 JSON デコードで問題が発生する可能性があります。特定の時刻形式パターンが想定されるため、問題が発生します。これを解決するには、カスタムのマーシャル関数とアンマーシャル関数を実装できます。
たとえば、次の JSON を考えてみましょう:
{ "name": "John", "birth_date": "1996-10-07" }
これを Person 構造体にデコードするとします:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
標準の JSON の使用decoder:
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) }
デコーダーは非標準の時刻形式を解析できないため、エラーが発生します。これに対処するには、時間値のカスタム タイプ エイリアスを作成し、カスタム マーシャル関数とアンマーシャル関数を実装します。
実装例は次のとおりです。
// Type alias type JsonBirthDate time.Time // Implement UnmarshalJSON 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 } // Implement MarshalJSON func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) } // Example use in struct type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` }
これらのカスタム関数を使用すると、 JSON データは、非標準の時刻形式が適切に解析され、ターゲットの Person 構造体に正常にデコードできるようになりました。
以上がJSON から非標準時間形式をデコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。