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.DecoderJSON 값을 Go 값으로 변환하기 전에 메모리 내의 모든 JSON 값을 버퍼링합니다.따라서 대부분의 경우 메모리 효율은 향상되지 않습니다(단, 향후 버전의 언어에서는 쉽게 변경될 수 있습니다).
더 나은 경험의 법칙은 다음과 같습니다.
- 사용하다
json.Decoder데이터 전송이 필요한 경우io.Reader스트림 또는 데이터 스트림에서 여러 값을 디코딩해야 합니다. - 사용하다
json.UnmarshalJSON 데이터가 이미 메모리에 있는 경우.
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 |