json을 사용하여 JSON을 디코딩하고 있습니다.언마샬 vs json.NewDecoder.디코드
요청에 따라 JSON 페이로드를 인코딩하고 응답에서 JSON 본문을 디코딩해야 하는 API 클라이언트를 개발 중입니다.
몇 개의 라이브러리에서 소스코드를 읽어 본 결과, JSON 문자열의 인코딩과 디코딩에는 기본적으로 두 가지 방법이 있습니다.
전체 응답 문자열 전달 사용
data, err := ioutil.ReadAll(resp.Body)
if err == nil && data != nil {
err = json.Unmarshal(data, value)
}
또는 사용json.NewDecoder.Decode
err = json.NewDecoder(resp.Body).Decode(value)
제 경우, 구현된 HTTP 응답을 처리할 때io.Reader
두 번째 버전은 코드가 적은 것 같습니다만, 둘 다 본 적이 있기 때문에, 다른 버전보다 솔루션을 사용하는 것이 좋은지 어떤지를 고민하고 있습니다.
게다가 이 질문에서 받아들여진 답변은 다음과 같다.
사용하세요
json.Decoder
대신json.Unmarshal
.
그 이유는 언급되지 않았습니다.정말 사용을 피해야 할까요?json.Unmarshal
?
그것은 정말로 당신의 의견이 무엇이냐에 달려있다.의 실장을 보면,Decode
의 방법json.Decoder
JSON 값을 Go 값으로 변환하기 전에 메모리 내의 모든 JSON 값을 버퍼링합니다.따라서 대부분의 경우 메모리 효율은 향상되지 않습니다(단, 향후 버전의 언어에서는 쉽게 변경될 수 있습니다).
더 나은 경험의 법칙은 다음과 같습니다.
- 사용하다
json.Decoder
데이터 전송이 필요한 경우io.Reader
스트림 또는 데이터 스트림에서 여러 값을 디코딩해야 합니다. - 사용하다
json.Unmarshal
JSON 데이터가 이미 메모리에 있는 경우.
HTTP 요청을 읽는 경우라면json.Decoder
개울물을 읽고 있는 게 분명하니까
바둑 웹 프로그래밍 책에서 이 단락을 찾았습니다.하지만 아무런 설명이 없다.
디코더 대 Unmarshal은 언제 사용할까요?
입력에 따라 다릅니다.데이터가 IO에서 전송되는 경우.리더 스트림(Body of http와 같은)요청, 디코더를 사용합니다.데이터가 문자열 또는 메모리 어딘가에 있는 경우 Unmarshal을 사용합니다.
언급URL : https://stackoverflow.com/questions/21197239/decoding-json-using-json-unmarshal-vs-json-newdecoder-decode
'programing' 카테고리의 다른 글
데이터 객체 배열을 json으로 변환 - Android (0) | 2023.03.26 |
---|---|
jQuery 1.4.1에서 JSON stringify가 누락되었습니까? (0) | 2023.03.26 |
올바른 형식으로 JSON 파일에 쓰는 방법 (0) | 2023.03.26 |
원인: org.hibernate.휴지 상태예외:Language Resolution 접근'hibernate.dialect'가 설정되지 않은 경우 정보는 null일 수 없습니다. (0) | 2023.03.26 |
Angular에 대한 캔버스 그리기 지침이 이미 있습니까?밖에 JS? (0) | 2023.03.26 |