ホームページ  >  記事  >  バックエンド開発  >  GoでJSONリクエストボディをキャプチャしてデコードする方法?

GoでJSONリクエストボディをキャプチャしてデコードする方法?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-02 14:39:30911ブラウズ

How to Capture and Decode JSON Request Body in Go?

Go でリクエスト本文から JSON をキャプチャする

API を開発する場合、多くの場合、POST リクエストの生の JSON 本文をキャプチャする必要があります。 Node.js では、このタスクは request.payload プロパティを使用することで簡単に行えます。ただし、Go では、このアプローチは最初はあまり明確ではないかもしれません。

課題

JSON 本文は io.ReadCloser 型内に格納されており、これは許可しません。複数の読み取り。 json.NewDecoder または context.Bind を使用して直接デコードしようとすると、通常、ボディのバッファーの性質により、空のメッセージまたはエラー メッセージが表示されます。

回避策: ボディを復元する

幸いなことに、本体の内容をキャプチャし、元の状態に復元して、デコード プロセスを実行するという回避策があります。これは、次の手順を使用して実現します。

  1. ioutil.ReadAll を使用して本体のコンテンツを読み取ります。
  2. ioutil.NopCloser と新しいバッファを使用して io.ReadCloser を元の状態に復元します。キャプチャされたコンテンツ。
  3. 構造体へのバインドなど、デコード ロジックに進みます。

コードのデモ

実装例は次のとおりです。 :

<code class="go">// Read the Body content
var bodyBytes []byte
if context.Request().Body != nil {
    bodyBytes, _ = ioutil.ReadAll(context.Request().Body)
}

// Restore the io.ReadCloser to its original state
context.Request().Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

// Continue to use the Body, like Binding it to a struct:
order := new(models.GeaOrder)
error := context.Bind(order)</code>

これらの手順に従うことで、Go アプリケーションで必要に応じて JSON 本文をキャプチャしてデコードできます。

以上がGoでJSONリクエストボディをキャプチャしてデコードする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。