상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
송어의 수명은 얼마나 될까요?
중국 경제 정책에서 '쌍순환' 전략이란 무엇인가요?
신입사원으로서의 경력 개발 계획은 어떻게 세워야 할까요?
신입사원이 제출한 보고서를 어떻게 피드백 받을 수 있을까요?
신입사원이 회사의 성공에 기여하기 위해 할 수 있는 일은 무엇인가요?
30대 여자친구 선물로 주얼리 보관함은 좋은 선택일까?
30대 여자친구 선물로 올리브유 세트는 괜찮을까?
공공임대주택에 대해 잘못된 정보는 어떤 것이 있나요?
공공임대주택의 필요성에 대한 논의는 어떻게 진행되고 있나요?
민간임대아파트의 보증금은 얼마인가요?
자동차보험 갱신 시 주의할 점은 무엇인가요?
자동차보험에서 미가입률에 대한 통계는 무엇인가요?
Previous
Next
수정하기 - Go에서 커스텀 JSON 직렬화 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Go에서 커스텀 JSON 직렬화를 구현하는 방법은 `encoding/json` 패키지를 활용하여 <a href='https://sangseek.com/sangseeks/구조체/ko'>구조체</a>의 필드를 JSON으로 변환하는 방식을 제어하는 것입니다. Go의 JSON 직렬화는 기본적으로 구조체의 필드 이름을 JSON 키로 사용하지만, 커스텀 직렬화를 통해 더 복잡한 요구사항을 충족할 수 있습니다. 1. 기본 JSON 직렬화 Go에서 구조체를 JSON으로 직렬화하려면 `json.Marshal` 함수를 사용합니다. 기본적인 예시는 다음과 같습니다: ```go package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { p := Person{Name: "Alice", Age: 30} jsonData, err := json.Marshal(p) if err != nil { fmt.Println(err) } fmt.Println(string(jsonData)) // {"name":"Alice","age":30} } ``` 2. 커스텀 JSON 직렬화 커스텀 직렬화를 위해서는 `json.Marshaler` 인터페이스를 구현해야 합니다. 이 인터페이스는 `MarshalJSON` 메서드를 정의해야 하며, 이 메서드 내에서 원하는 형식으로 JSON을 생성할 수 있습니다. 예제: 커스텀 직렬화 다음은 `Person` 구조체를 커스텀 직렬화하는 예제입니다. 여기서는 `Age` 필드를 JSON에 포함하지 않고, `Name` 필드를 대문자로 변환하여 직렬화합니다. ```go package main import ( "encoding/json" "fmt" "strings" ) type Person struct { Name string Age int } // MarshalJSON 메서드를 구현하여 커스텀 직렬화를 정의합니다. func (p Person) MarshalJSON() ([]byte, error) { type Alias Person // Alias를 사용하여 무한 루프를 방지합니다. return json.Marshal(<a href='https://sangseek.com/sangseeks/&str/ko'>&str</a>uct { Name string `json:"name"` // Age 필드는 포함하지 않음 }{ Name: strings.ToUpper(p.Name), // 이름을 대문자로 변환 }) } func main() { p := Person{Name: "Alice", Age: 30} jsonData, err := json.Marshal(p) if err != nil { fmt.Println(err) } fmt.Println(string(jsonData)) // {"name":"ALICE"} } ``` 3. 커스텀 JSON 역직렬화 역직렬화(디코딩)도 커스텀 방식으로 구현할 수 있습니다. 이를 위해 `json.Unmarshaler` 인터페이스를 구현하고 `UnmarshalJSON` 메서드를 정의합니다. 예제: 커스텀 역직렬화 다음은 JSON 데이터를 `Person` 구조체로 역직렬화하는 예제입니다. 여기서는 JSON의 `name` 필드를 소문자로 변환하여 저장합니다. ```go package main import ( "encoding/json" "fmt" "strings" ) type Person struct { Name string Age int } // UnmarshalJSON 메서드를 구현하여 커스텀 역직렬화를 정의합니다. func (p *Person) UnmarshalJSON(data []byte) error { type Alias Person // Alias를 사용하여 무한 루프를 방지합니다. aux := &struct { Name string `json:"name"` Age int `json:"age"` }{ Age: 0, // 기본값 설정 } if err := json.Unmarshal(data, &aux); err != nil { return err } p.Name = strings.ToLower(aux.Name) // 이름을 소문자로 변환 p.Age = aux.Age return nil } func main() { jsonData := []byte(`{"name":"ALICE","age":30}`) var p Person if err := json.Unmarshal(jsonData, &p); err != nil { fmt.Println(err) } fmt.Println(p) // {alice 30} } ``` 4. 결론 Go에서 커스텀 JSON 직렬화 및 역직렬화는 `json.Marshaler`와 `json.Unmarshaler` 인터페이스를 구현함으로써 가능합니다. 이를 통해 JSON 데이터의 형식을 자유롭게 조정할 수 있으며, 특정 요구사항에 맞게 데이터를 변환할 수 있습니다. 이러한 기능은 API와의 상호작용이나 데이터 저장 시 매우 유용하게 사용될 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기