"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Golang의 JSON에서 비표준 시간 형식을 구문 분석하는 방법은 무엇입니까?

Golang의 JSON에서 비표준 시간 형식을 구문 분석하는 방법은 무엇입니까?

2024-11-09에 게시됨
검색:690

How to Parse Non-Standard Time Formats from JSON in Golang?

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