json.Unmarshal принимает загруженный []byte. json.Decoder создается от io.Reader и читает из потока по мере необходимости.
dec := json.NewDecoder(resp.Body)
for dec.More() {
var item Item
if err := dec.Decode(&item); err != nil { ... }
process(item)
}Для одного объекта в памяти достаточно Unmarshal; для длинных ответов и файлов - Decoder.