JSON에서 비표준 시간 형식 디코딩
비표준 시간 형식이 포함된 JSON 데이터를 처리할 때 표준 JSON 디코딩에서 발생할 수 있는 문제 특정 시간 형식 패턴을 예상하기 때문에 문제가 발생합니다. 이를 극복하기 위해 사용자 정의 마샬링 및 역마샬링 기능을 구현할 수 있습니다.
예를 들어 다음 JSON을 고려해보세요.
{ "name": "John", "birth_date": "1996-10-07" }
이를 Person 구조체로 디코딩한다고 가정해 보겠습니다.
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
표준 JSON 사용 디코더:
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) }
디코더가 비표준 시간 형식을 구문 분석할 수 없으므로 오류가 발생합니다. 이 문제를 해결하기 위해 시간 값에 대한 사용자 정의 유형 별칭을 만들고 사용자 정의 마샬링 및 역마샬링 함수를 구현할 수 있습니다.
구현 예는 다음과 같습니다.
// Type alias type JsonBirthDate time.Time // Implement UnmarshalJSON 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 } // Implement MarshalJSON func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) } // Example use in struct type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` }
이러한 사용자 정의 함수를 사용하면 이제 비표준 시간 형식을 적절하게 구문 분석하여 JSON 데이터를 대상 Person 구조체로 성공적으로 디코딩할 수 있습니다.
위 내용은 JSON에서 비표준 시간 형식을 디코딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!