Да, вы можете использовать json.Encoder
для потоковой передачи выходных данных JSON и аналогично json.Decoder
для декодирования потоковых входных данных JSON.Для записи результата JSON в / чтения из них требуются любые io.Writer
и io.Reader
, включая gzip.Writer
и gzip.Reader
.
Например:
var body bytes.Buffer
w := gzip.NewWriter(&body)
enc := json.NewEncoder(w)
payload := map[string]interface{}{
"one": 1, "two": 2,
}
if err := enc.Encode(payload); err != nil {
panic(err)
}
if err := w.Close(); err != nil {
panic(err)
}
Чтобы убедиться, что это работает, вот как мы можем его декодировать:
r, err := gzip.NewReader(&body)
if err != nil {
panic(err)
}
dec := json.NewDecoder(r)
payload = nil
if err := dec.Decode(&payload); err != nil {
panic(err)
}
fmt.Println("Decoded:", payload)
Что выдаст (попробуйтена игровой площадке Go ):
Decoded: map[one:1 two:2]