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

Go에서 비표준 JSON 시간 형식을 사용자 정의 비정렬화하는 방법은 무엇입니까?

2024년 12월 23일에 게시됨
검색:872

How to Custom Unmarshal Non-Standard JSON Time Formats in Go?

비표준 JSON 시간 형식에 대한 사용자 지정 취소/마샬링

비표준 형식의 시간 값이 포함된 JSON 데이터를 처리할 때, 내장 JSON 디코더에 오류가 발생할 수 있습니다. 이러한 상황을 처리하기 위해 사용자 정의 마샬링 및 역마샬링 기능을 구현할 수 있습니다.

다음 JSON을 고려하세요.

{
    "name": "John",
    "birth_date": "1996-10-07"
}

그리고 원하는 Go 구조체:

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}

표준 JSON 디코더를 사용하면 '생년월일' 필드를 구문 분석하는 동안 오류가 발생합니다. 이 동작을 사용자 정의하려면 유형 별칭을 만들고 구조체에 추가할 수 있습니다.

type JsonBirthDate time.Time

그런 다음 사용자 정의 마샬링 및 역마샬링 함수가 구현됩니다.

func (j *JsonBirthDate) UnmarshalJSON(b []byte) error {
    s := strings.Trim(string(b), `"`) // Remove quotes
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        return err
    }
    *j = JsonBirthDate(t)
    return nil
}

func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

이러한 사용자 지정 함수를 사용하면 이제 JSON을 의도한 대로 Go 구조체로 디코딩할 수 있습니다.

person := Person{}

decoder := json.NewDecoder(req.Body);

if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}

// Print the birth date using the Format function
fmt.Println(person.BirthDate.Format("2006-01-02"))
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3