一般的な JSON 解析シナリオでは、時刻値は RFC 3339 形式 ("2006-01-02T15)" に準拠することが期待されます。 :04:05Z07:00")。ただし、非標準の時刻形式を扱う場合、デフォルトの JSON デコーダで問題が発生します。
これを克服するには、非標準の時刻形式を表すカスタム データ型に対してカスタム マーシャル メソッドとアンマーシャル メソッドを実装できます。例:
// Create a type alias for the non-standard time format type JsonBirthDate time.Time // Implement UnmarshalJSON to handle conversion from JSON string to time.Time 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 to handle conversion from time.Time to JSON string func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
次に、このカスタム タイプを Person 構造体に組み込みます:
type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` }
これらのカスタム メソッドを利用することで、JSON デコーダーは非標準時間を正常に解析できるようになりました。形式:
person := Person{} decoder := json.NewDecoder(req.Body) if err := decoder.Decode(&person); err != nil { log.Println(err) }
以上がJSON 解析で非標準時間形式を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。