Programming Language/golang
json value가 null일때 golang은 Unmarshal을 잘 할 수 있을까?
AndersonChoi
2024. 1. 18. 16:54
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>
반응형