비표준 시간 형식이 포함된 JSON을 사용자 지정 구조체로 디코딩하기 위해 내장된 마샬링 및 비정렬 함수가 유연성을 제공합니다.
다음 JSON을 고려하세요.
{ "name": "John", "birth_date": "1996-10-07" }
그리고 데이터를 보관하기 위한 사용자 정의 구조체:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
기본 디코더를 사용하여 이 JSON을 디코딩하는 것은 다음과 같은 이유로 실패합니다. -표준 시간 형식. 이를 처리하려면 사용자 정의 마샬링 및 역마샬링 함수를 구현하십시오.
type JsonBirthDate 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 } func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
JsonBirthDate를 Person 구조체에 추가하고 이러한 함수를 구현하면 다음 코드가 JSON을 올바르게 디코딩합니다.
person := Person{} decoder := json.NewDecoder(req.Body) err := decoder.Decode(&person) if err != nil { log.Println(err) } // person.BirthDate now contains the parsed time as a time.Time object
위 내용은 비표준 시간 형식으로 JSON을 디코딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!