当前将对象转换为json和gzip的方法是:
jsonBytes, _ := json.Marshal(payload)
//gzip json
var body bytes.Buffer
g := gzip.NewWriter(&body)
g.Write(jsonBytes)
g.Close()
这将产生一个中间的大字节缓冲区jsonBytes
,其唯一目的是将其转换为压缩后的缓冲区。
有什么方法可以使payload
对象的编组流流,使它首先被压缩吗?
答案 0 :(得分:6)
是的,您可以使用json.Encoder
来流化JSON输出,并且类似地json.Decoder
来解码流化的JSON输入。他们使用任何io.Writer
和io.Reader
来写入JSON结果到/从中读取,包括gzip.Writer
和gzip.Reader
。
例如:
import datetime
date_entry = "04/05/2019"
datetime.datetime.strptime(date_entry, "%d/%m/%Y")
要验证其是否有效,我们可以通过以下方式对其进行解码:
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)
}
将输出(在Go Playground上尝试):
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)