当`json.NewDecoder.Decode`失败时,如何保存响应体?

时间:2016-12-05 20:57:57

标签: json go

这个片段的要点在Go:

中似乎相当普遍
if err := json.NewDecoder(r.Body).Decode(&mr); err != nil {
    return mr, err
}

但是如果出现错误,我如何实际检索r.Body的字符串表示?在这种情况下,将此包含在错误日志中是有利的,而不是仅通过结构来查找Zip有时是字符串,有时是整数。

不幸的是,此时身体已经关闭,所以我不知道如何再次访问它。

抢先将主体解码为字符串,然后对其进行编码并尝试结构映射似乎是一个额外的步骤。还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

如果要保存正文,请在解组之前保存正文。

//...
body, err := ioutil.ReadAll(r.Body)
if err != nil {
    return err
}

err = json.Unmarshal(body, &mr)
//...