Go에서 JSON 시간 언마샬링 사용자 정의
시간 값이 포함된 JSON 데이터를 처리할 때 Go의 인코딩/json 패키지가 제한될 수 있습니다. 시간 형식이 RFC 3339를 준수하지 않는 경우. 시간을 RFC 3339 형식으로 수동으로 변환할 수는 있지만 구문 분석에는 더 효율적인 접근 방식이 있습니다.
Marshaler/Unmarshaler 인터페이스 구현
사용자 정의 시간 형식을 처리하려면 json.Marshaler 및 json을 구현하는 사용자 정의 유형을 생성하세요. 언마샬러 인터페이스. 이를 통해 시간 값을 직렬화 및 역직렬화하는 방법을 정의할 수 있습니다.
다음은 CustomTime이라는 사용자 정의 유형의 예입니다.
type CustomTime struct { time.Time } const ctLayout = "2006/01/02|15:04:05" func (ct *CustomTime) UnmarshalJSON(b []byte) (err error) { s := strings.Trim(string(b), "\"") if s == "null" { ct.Time = time.Time{} return } ct.Time, err = time.Parse(ctLayout, s) return } func (ct *CustomTime) MarshalJSON() ([]byte, error) { if ct.Time.IsZero() { return []byte("null"), nil } return []byte(fmt.Sprintf("\"%s\"", ct.Time.Format(ctLayout))), nil } var nilTime = (time.Time{}).UnixNano() func (ct *CustomTime) IsSet() bool { return !ct.IsZero() }
이 사용자 정의 유형의 경우:
사용방법
일회 CustomTime 유형이 정의되어 사용자 정의 시간 형식으로 JSON 데이터를 역직렬화하는 구조체 필드로 사용할 수 있습니다.
type Args struct { Time CustomTime } var data = ` { "Time": "2014/08/01|11:27:18" } ` func main() { a := Args{} fmt.Println(json.Unmarshal([]byte(data), &a)) fmt.Println(a.Time.String()) }
이 예는 Time 필드가 사용자 정의 "2006/01에 있는 JSON 데이터를 성공적으로 역직렬화합니다. /02|15:04:05" 형식입니다.
위 내용은 비RFC 3339 형식을 처리하기 위해 Go에서 JSON 시간 역마샬링을 어떻게 사용자 정의할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!