データ構造を定義せずにGoでリクエスト本文からJSONを読み取る方法は?

Susan Sarandon
リリース: 2024-10-31 23:08:29
オリジナル
684 人が閲覧しました

How to Read JSON from Request Body in Go Without Defined Data Structures?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート