在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中文網其他相關文章!