JSON에서 비표준 시간 형식 구문 분석
JSON 데이터를 사용자 정의 구조로 디코딩할 때 날짜 형식의 불일치가 발생할 수 있습니다. 이 문제를 해결하기 위해 Golang은 사용자 정의 마샬링 및 역마샬링 기능을 구현하는 옵션을 제공합니다.
사용자 정의 마샬러 및 언마샬러 함수
사용자 정의 구문 분석 형식을 지정하려면 유형 별칭은 다음과 같습니다. 시간 필드에 대해 생성되었으며 Marshaler 및 Unmarshaler 인터페이스는 다음과 같이 구현됩니다.
type JsonBirthDate time.Time // UnmarshalJSON translates a JSON string to a time value. 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 } // MarshalJSON converts a time value to a JSON string. func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
이 사용자 정의 로직은 JSON 값이 원하는 형식인지 확인하고 그에 따라 구문 분석합니다.
업데이트된 구조 및 구문 분석
구조체는 다음과 같습니다. 사용자 정의 유형을 사용하도록 업데이트되었으며 디코딩은 평소와 같이 진행될 수 있습니다.
type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` } decoder := json.NewDecoder(req.Body) if err := decoder.Decode(&person); err != nil { log.Println(err) }
추가 기능
편의를 위해 Format 메소드를 추가하여 날짜의 형식화된 표현을 제공할 수 있습니다.
// Format prints the date using the specified format string. func (j JsonBirthDate) Format(s string) string { t := time.Time(j) return t.Format(s) }
이 사용자 정의 마샬링 및 역마샬링 접근 방식을 사용하면 표준 형식에서 벗어나는 경우에도 JSON의 시간 값을 유연하게 구문 분석할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3