我正在开发的API的客户端,其中我需要以编码上请求一个JSON有效载荷和从响应解码JSON体。解码JSON在Golang VS json.NewDecoder.Decode
我从几个图书馆阅读源代码,从我所看到的,我有编码和JSON字符串解码基本上有两种可能性。
使用json.Unmarshal
通过整个响应字符串
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)
在我的情况下,实现io.Reader
,第二个版本似乎需要更少的代码HTTP响应处理时,但是既然我看到了两者,我想知道我是否应该使用解决方案而不是其他解决方案。
此外,the accepted answer from this question说
请使用
json.Decoder
代替json.Unmarshal
。
,但它没有提到的原因。我真的应该避免使用json.Unmarshal
?
这[GitHub上拉入请求(https://github.com/codegangsta/martini-contrib/pull/84)代替调用解组与json.NewDecoder“在JSON解码中删除缓冲区”。 – Matt
它只是取决于什么输入更方便您使用。 http://blog.golang.org/json-and-go给出了使用这两种技术的例子。 – rexposadas
IMO,'ioutil.ReadAll'几乎总是做错事。这与您的目标无关,但要求您有足够的连续内存来存储管道中可能存在的任何内容,即使最后20TB的响应位于JSON中最后一个'}之后。 – Dustin