golang은 JSON Format 데이터를 struct로 변환할 수 있는데 이것을 Unmarshal이라고 부릅니다. 예를 들어 다음과 같은 함수로 구현될 수 있습니다.
func getStructFromJSON(jsonData string, valuePtr interface{}) error {
return json.Unmarshal([]byte(jsonData), valuePtr)
}
- jsonData : json포맷으로된 String 데이터
- valuePtr : struct타입
예를 들어 다음과 같이 호출할 수 있습니다.
type SampleStruct struct {
A int32 `json:"a"`
B int32 `json:"b"`
}
func main() {
var valuePtr SampleStruct
err := getStructFromJSON("{\"a\": 13,\"b\": 11}", &valuePtr)
if err != nil {
log.Print(err)
}
log.Print(valuePtr.A)
log.Print(valuePtr.B)
}
결과는 다음과 같습니다.
2024/01/01 16:50:25 13
2024/01/01 16:50:25 11
그런데 만약에 숫자 대신에 null이 들어가 있으면 어떻게 될까요?
{"a": 13,"b": null}
상기 데이터가 들어갈 경우 결과는 다음과 같습니다.
2024/01/01 16:51:28 13
2024/01/01 16:51:28 0
0으로 초기화 되는 것을 알 수 있습니다.
만약 0으로 초기화가 아니라 null로 초기화 하고 싶다면?
golang에서 int32는 nil 표현이 불가능합니다. 만약 nil을 표현하고 싶다면 pointer 타입으로 정의해야 합니다.
type SampleStruct struct {
A int32 `json:"a"`
B *int32 `json:"b"`
}
func main() {
var valuePtr SampleStruct
err := getStructFromJSON("{\"a\": 13,\"b\": null}", &valuePtr)
if err != nil {
log.Print(err)
}
log.Print(valuePtr.A)
log.Print(valuePtr.B)
}
실행시 결과는 다음과 같습니다.
2024/01/01 16:53:08 13
2024/01/01 16:53:08 <nil>
반응형
'Programming Language > golang' 카테고리의 다른 글
Redis-go를 interface화 하여 사용하기 (0) | 2024.02.26 |
---|---|
map[string]interface 데이터를 avro 포맷으로 파일 저장하는 방법 (0) | 2023.11.28 |
golang struct type을 JSON으로 Print 하기 (0) | 2023.03.29 |
golang prviate repository에서 디펜던시 가져오는 방법 (0) | 2023.03.06 |
goroutine 함수 여러번 실행 결과값 기다리는 2가지 방법 - js callback 처럼 (1) | 2023.03.03 |
go gin framework graceful shutdown 예제 (0) | 2023.03.03 |