Как мне прочитать потоковое тело ответа, используя пакет Golang net/http?

Я пытаюсь подключиться к конечной точке, которая выполняет http потоковую передачу данных JSON. Мне было интересно, как выполнить базовый запрос с помощью пакета Go / net / http и прочитать ответ по мере его поступления. В настоящее время я могу прочитать ответ только при закрытии соединения.

resp, err := http.Get("localhost:8080/stream")
if err != nil {
    ...
}
...
// perform work while connected and getting data

Любое понимание будет с благодарностью!

Спасибо!

-RC

2 ответа

Решение

Потоковый анализ JSON можно выполнить с помощью декодера:

json.NewDecoder(resp.Body).Decode(&yourStuff)

Для потокового API, где возвращается множество объектов (например, в Twitter), это должно отлично работать с этой моделью и встроенным API кодирования / JSON. Но если это большой отклик, когда у вас есть объект, у которого есть гигантский массив с 10 МБ содержимого, вам, вероятно, нужно написать собственный декодер, чтобы вытащить эти внутренние части и вернуть их. Я столкнулся с этой проблемой с библиотекой, которую я написал.

Ответ, предоставленный Евой Фриман, является правильным способом чтения данных JSON. Для чтения любого типа данных вы можете использовать метод ниже:

resp, err := http.Get("http://localhost:3000/stream")
...

reader := bufio.NewReader(resp.Body)
for {
    line, err := reader.ReadBytes('\n')
    ...

    log.Println(string(line))
}
Другие вопросы по тегам