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에서 시간 값을 유연하게 구문 분석할 수 있습니다. 표준 형식에서 벗어났습니다.
위 내용은 Golang의 JSON에서 비표준 시간 형식을 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!