비표준 JSON 시간 형식에 대한 사용자 정의 Un/Marshaling
비표준 형식의 시간 값이 포함된 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 디코더에서는 "birth_date" 필드를 구문 분석하는 동안 오류가 발생합니다. 이 동작을 사용자 정의하려면 유형 별칭을 생성하고 구조체에 추가할 수 있습니다.
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"))
위 내용은 Go에서 비표준 JSON 시간 형식을 사용자 정의 비정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!