Go에서 JSON 데이터로 작업하는 방법
encoding/json
, io
, net/http
, sync
등. 나는 이것들을 비교적 짧게 유지하고 예제 중심으로 유지할 계획입니다.the code is available in this GitHub repo
내가 다루고 싶은 특정 Go 주제에 대한 제안을 기꺼이 받아들일 것입니다! 부담없이 댓글을 남겨주세요😃
이 문서에서는 JSON과 Go 유형 간의 변환을 처리하는
encoding/json
패키지를 다룹니다( RFC 7159 에 따름). 바로 뛰어들자!Go 유형을 JSON으로 변환
육군 원수
일반적인 옵션은 서명이 다음과 같은
Marshal
함수를 사용하는 것입니다. func Marshal(v interface{}) ([]byte, error)
다음은 예입니다.
func main() {
profile := Profile{Email: "[email protected]", Username: "abhirockzz", Blogs: []Blog{
Blog{BlogName: "devto", URL: "https://dev.to/abhirockzz/"},
Blog{BlogName: "medium", URL: "https://medium.com/@abhishek1987/"},
}}
jsonData, err := json.Marshal(&myprofile)
//jsonData, err := json.MarshalIndent(&profile, "", " ")
if err != nil {
panic(err)
}
fmt.Println(string(jsonData))
}
you can use
MarshalIndent
(commented) to indent the JSON output
인코더
Marshal
은 바이트 배열( []byte
)을 처리하지만 Encoder
은 일반적이며 JSON 데이터의 싱크로 정의할 수 있는 io.Writer
으로 작업할 수 있습니다. 즉, io.Writer
인터페이스를 구현하는 모든 유형을 지정할 수 있습니다. 이것은 표준 출력( os.Stdout
) 또는 HTTP 응답( http.ResponseWriter
) 등일 수 있습니다.func main() {
profile := Profile{Email: "[email protected]", Username: "abhirockzz", Blogs: []Blog{
Blog{BlogName: "devto", URL: "https://dev.to/abhirockzz/"},
Blog{BlogName: "medium", URL: "https://medium.com/@abhishek1987/"},
}}
encoder := json.NewEncoder(os.Stdout)
err := encoder.Encode(&profile)
if err != nil {
panic(err)
}
}
NewEncoder
을 사용하여 io.Writer
을 지정합니다. Encode
을 호출하면 변환이 발생하고 JSON은 지정한 io.Writer
에 작성됩니다.다음은 HTTP 응답에서 작동하는 방식의 예입니다.
func main() {
profile := Profile{Email: "[email protected]", Username: "abhirockzz", Blogs: []Blog{
Blog{BlogName: "devto", URL: "https://dev.to/abhirockzz/"},
Blog{BlogName: "medium", URL: "https://medium.com/@abhishek1987/"},
}}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
encoder := json.NewEncoder(w)
err := encoder.Encode(&profile)
if err != nil {
panic(err)
}
})
http.ListenAndServe(":8080", nil)
}
JSON 데이터를 Go 유형으로 변환
언마샬링
바이트 배열 형식의 JSON이 주어지면
Unmarshal
은 JSON 구문 분석 결과를 지정한 Go 데이터 유형의 포인터(일반적으로 struct
)에 저장합니다.func Unmarshal(data []byte, v interface{}) error
다음은 간단한 예입니다.
func main() {
jsonData := `{"email":"[email protected]","username":"abhirockzz","blogs":[{"name":"devto","url":"https://dev.to/abhirockzz/"},{"name":"medium","url":"https://medium.com/@abhishek1987/"}]}`
var profile Profile
err := json.Unmarshal([]byte(jsonData), &profile)
if err != nil {
panic(err)
}
...
}
디코더
Decoder
은 JSON 입력 소스를 바이트 배열이 아닌 io.Reader
형식으로 지정할 수 있도록 하여 JSON 데이터를 비정렬화하는 일반적인 방법을 제공합니다.func main() {
jsonData := `{"email":"[email protected]","username":"abhirockzz","blogs":[{"name":"devto","url":"https://dev.to/abhirockzz/"},{"name":"medium","url":"https://medium.com/@abhishek1987/"}]}`
jsonDataReader := strings.NewReader(jsonData)
decoder := json.NewDecoder(jsonDataReader)
var profile Profile
err := decoder.Decode(&profile)
if err != nil {
panic(err)
}
...
}
바로 가기
io.Reader
을 사용하여 JSON string
데이터에서 strings.NewReader
을 생성하는 것으로 시작합니다. 그런 다음 NewDecoder
을 사용하여 디코더를 인스턴스화하고 결과가 저장되는 decode
구조체에 대한 포인터와 함께 Profile
을 간단히 사용할 수 있습니다.이것이 이 블로그의 전부입니다! 앞으로도 많은 시청 부탁드리며 좋아요와 팔로우 잊지마세요😃😃
Reference
이 문제에 관하여(Go에서 JSON 데이터로 작업하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/itnext/how-to-work-with-json-data-in-go-2m9g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)