我有一个 []byte
类型的 JSON 对象,它是我使用 json.Marshal
从结构创建的。我想在将 JSON 发布到我的端点之前对其进行 GZip 压缩。以下不起作用:
gz := gzip.NewWriter(myJSON)
因为[]byte
没有实现io.Writer
。
一旦我已经创建了 JSON,是否有一些非常简单的方法可以做到这一点?
最佳答案
压缩到缓冲区并发布该缓冲区。
var buf bytes.Buffer
gz := gzip.NewWriter(&buf)
gz.Write(myJSON)
gz.Close()
因为一个*bytes.Buffer
定义了io.Reader
接口(interface),所以在创建请求的时候可以直接使用buffer。
req, err := http.NewRequest("POST", url, &buf)
if err != nil {
// handle error
}
req.Header.Set("Content-Encoding", "gzip")
req.Header.Set("Content-Type", "application/json; charset=utf-8")
关于json - POST 之前的 gzip JSON 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56994992/