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>
Thisこのソリューションを使用すると、構造を強制せずに生の JSON 本文をキャプチャできるため、任意の JSON データを処理する必要がある状況に最適です。
以上がデータ構造を定義せずにGoでリクエスト本文からJSONを読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。