저번에 패키지를 정리하면서 이 두개의 패키지에서의 차이점이 궁금하여 정리를 하게 되었습니다.
JSON문자열을 Go 밸류로 바꾸는 것을 디코딩 이라고 합니다.
json.Decoder
가 이런 경우에 사용을 하게 됩니다.일단 json.NewDecoder
함수로 디코더를 만들게 되고 이후 json.Decode
를 통해 JSON문자열을 Go 밸류로 변경하게 됩니다.
이와 반대로 인코딩은 NewEncoding
함수로 인코더를 만들고 이후 json.Encode
를 통해서 인코딩 하게 됩니다.
이 패키지를 만드는 함수 json.NewDecoder
에 들어가는 인자는 io.Writer 타입을 받게 됩니다.
둘은 모두 타입을 변환한다는 점에서 동일하지만 Marshal은 JSON으로 변환하는 것이 아니라 바이트 슬라이스로 변환을 합니다.
보통 Post요청을 통해 들어오면 ioutil.ReadAll(r.Body)
를 통해서 바이트 슬라이스로 변경을 한뒤에 사용을 합니다.
data := ioutil.ReadAll(r.Body)`
json.Unmarshal([]byte(data), 변수(포인터값))