我想在解析之前将 JSON 响应保存到文本文件:req, err := http.NewRequest("POST", url, body)req.Header.Set("Authorization", "secret_key")req.Header.Set("Content-Type", "application/json")resp, err := client.Do(req)if err != nil { log.Fatal(err)}defer resp.Body.Close()f, err := os.Create("./response.json")if err != nil { log.Fatal(err)}defer f.Close()io.Copy(f, resp.Body)var result JSONResultif err := json.NewDecoder(resp.Body).Decode(&result); err != nil { log.Fatal(err)}它成功地将 JSON 写入文件,但随后在解码步骤中失败,并出现一个错误,即EOF. 如果我在写入文件之前解析它解析正常,但文件为空。有人可以解释这里发生了什么吗?谢谢!
1 回答
波斯汪
TA贡献1811条经验 获得超4个赞
http.Response.Body
是 类型io.ReadCloser
,只能读取一次(如您所见,它没有倒带方法)。
因此,或者出于解码目的,您可以读取刚刚创建的文件。
或者,如果响应不大(或者您可以使用 对其进行修剪io.LimitReader
)- 您可以将其读入缓冲区
(未经测试,类似这些):
f, err := os.Create("./response.json")
if err != nil {
log.Fatal(err)
}
defer f.Close()
var buf bytes.Buffer
tee := io.TeeReader(r.Body, &buf)
io.Copy(f, tee)
var result JSONResult
if err := json.NewDecoder(buf).Decode(&result); err != nil {
log.Fatal(err)
}
- 1 回答
- 0 关注
- 295 浏览
添加回答
举报
0/150
提交
取消