비표준 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 디코더를 사용하면 '생년월일' 필드를 구문 분석하는 동안 오류가 발생합니다. 이 동작을 사용자 정의하려면 유형 별칭을 만들고 구조체에 추가할 수 있습니다.
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"))
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3