在 Go 中从请求正文读取 JSON
在 Go 中,获取 POST 请求的原始 JSON 正文对于初学者来说可能具有挑战性。这是因为 http.Response.Body 会缓冲响应,从而阻止后续读取。
但是,存在一种解决方法,可以在不依赖预定数据结构的情况下捕获 JSON 正文。为了实现这一点:
<code class="go">// Capture the body bytes bodyBytes, _ := ioutil.ReadAll(context.Request().Body) // Restore the response body context.Request().Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes)) // Decode the JSON var v interface{} err := json.NewDecoder(context.Request().Body).Decode(&v) if err != nil { return result, err }</code>
这种方法保留了原始正文以供后续阅读。
为了进一步演示,这里有一个使用 Echo 框架的示例:
<code class="go">func myHandler(c echo.Context) error { // Capture the body bytes bodyBytes, _ := ioutil.ReadAll(c.Request().Body) // Restore the response body c.Request().Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes)) // Decode the JSON var payload map[string]interface{} err := json.NewDecoder(c.Request().Body).Decode(&payload) if err != nil { return c.JSON(http.StatusBadRequest, "Invalid JSON provided") } // Use the decoded payload return c.JSON(http.StatusOK, payload) }</code>
这个解决方案使您能够捕获原始 JSON 正文,而无需任何强加的结构,使其非常适合需要处理任意 JSON 数据的情况。
以上是如何在没有定义数据结构的情况下从 Go 中的请求体读取 JSON?的详细内容。更多信息请关注PHP中文网其他相关文章!