ホームページ > バックエンド開発 > Golang > Go でリクエスト本文から JSON データを取得するにはどうすればよいですか?

Go でリクエスト本文から JSON データを取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-31 10:34:06
オリジナル
553 人が閲覧しました

How to Retrieve JSON Data from a Request Body in Go?

Go でリクエスト本文から JSON を取得する

JSON コンテンツを含む POST リクエストを操作する場合、JSON データを抽出する必要があります。リクエストの本文から。ただし、これは、Node.js などの言語からコードを移行している Go 初心者にとっては不可解な作業になる可能性があります。

この問題に対処するために、次のようないくつかのアプローチが試みられています。

var v インターフェース{}<br>err := json.NewDecoder(context.Request().Body).Decode(&v)<br>if err != nil {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">return result, err
ログイン後にコピー
ログイン後にコピー

}
fmt .Println(v)

この例では、結果は多くの場合空になり、本文が空であることを示します。これは、http.Request.Body がバッファであり、一度そこからデータが読み取られると、再度読み取ることができないためです。

別のアプローチは次のとおりです。

m := echo .Map{}<br>if err := context.Bind(&m); err != nil {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">return result, err
ログイン後にコピー
ログイン後にコピー

}
fmt.Println(m)

ここで、コードの結果は「EOF」というエラー メッセージになります。 。」このエラーは、リクエストに content-type ヘッダーがないため、Echo が送信されるデータのタイプを判断できないために発生します。

最後に、本文を直接読み取ろうとします。

< pre>body, error := ioutil.ReadAll(context.Request().Body)
if error != nil {

return result, error
ログイン後にコピー

}
fmt.Println(body)

ioutil.ReadAll() がリクエスト本文を消費するため、結果は空のバイト配列になります。

解決策は、http.Request.Body の性質を理解することにあります。バッファを確保し、読み取り後にそれを復元する方法を見つけます。次のコード スニペットは回避策を提供します。

// 本文の内容を読み取ります<br>var bodyBytes []byte<br>if context.Request().Body != nil {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">bodyBytes, _ = ioutil.ReadAll(context.Request().Body)
ログイン後にコピー

}

// io.ReadCloser を元の状態に復元します
context.Request().Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

// ボディを構造体にバインドするなど、ボディの使用を続けます:
order := new(models.GeaOrder)
error := context.Bind(order)

この回避策により、本文を読み取り、その内容を後で使用できるように保存し、そのデータを構造体に正常にバインドできるようになりました。

以上がGo でリクエスト本文から JSON データを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:Windows で exec パッケージを使用して二重引用符で囲まれた引数を含むコマンドを実行する方法 次の記事:「go install」が「GOPATH」設定を無視して「GOROOT」にインストールするのはなぜですか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート