我想在解析之前將 JSON 響應(yīng)保存到文本文件: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 寫入文件,但隨后在解碼步驟中失敗,并出現(xiàn)一個錯誤,即EOF. 如果我在寫入文件之前解析它解析正常,但文件為空。有人可以解釋這里發(fā)生了什么嗎?謝謝!
1 回答

波斯汪
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個贊
http.Response.Body
是 類型io.ReadCloser
,只能讀取一次(如您所見,它沒有倒帶方法)。
因此,或者出于解碼目的,您可以讀取剛剛創(chuàng)建的文件。
或者,如果響應(yīng)不大(或者您可以使用 對其進(jìn)行修剪io.LimitReader
)- 您可以將其讀入緩沖區(qū)
(未經(jīng)測試,類似這些):
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 關(guān)注
- 339 瀏覽
添加回答
舉報(bào)
0/150
提交
取消