[解決済み】json.Unmarshalとjson.NewDecoder.Decodeを使ったJSONのデコードについて
2022-04-20 16:14:15
質問
APIクライアントを開発しているのですが、リクエスト時にJSONペイロードをエンコードし、レスポンスからJSONボディをデコードする必要があります。
いくつかのライブラリのソースコードを読みましたが、私が見たところ、JSON文字列のエンコードとデコードには、基本的に2つの可能性があります。
使用方法
json.Unmarshal
応答文字列全体を渡す
data, err := ioutil.ReadAll(resp.Body)
if err == nil && data != nil {
err = json.Unmarshal(data, value)
}
または
json.NewDecoder.Decode
err = json.NewDecoder(resp.Body).Decode(value)
私の場合、HTTPレスポンスを処理する際に
io.Reader
しかし、私は両方を見たので、私は他のソリューションではなく、どちらかを使用するべきかどうか、何か好みがあるのでしょうか。
さらに この質問に対する回答は は言う。
をご利用ください。
json.Decoder
の代わりにjson.Unmarshal
.
が、その理由については書かれていませんでした。の使用は本当に避けるべきでしょうか?
json.Unmarshal
?
解決方法は?
それは、あなたの入力が何であるかに本当に依存します。 の実装を見てみると
Decode
メソッドの
json.Decoder
の場合、Goの値にアンマーシャルする前に、JSONの値全体をメモリにバッファリングします。 そのため、ほとんどの場合、メモリ効率は上がりません(ただし、これは言語の将来のバージョンで簡単に変更される可能性があります)。
ですから、より良い経験則はこうです。
-
使用する
json.Decoder
からのデータである場合io.Reader
ストリームから複数の値をデコードする必要がある場合などです。 -
使用方法
json.Unmarshal
は、すでにJSONデータをメモリ上に持っている場合です。
HTTPリクエストから読み込む場合、私なら
json.Decoder
明らかにストリームから読み込んでいるので。
関連
-
[解決済み] JSONPathで文字列によるフィルタリングを行うには?
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] nodeやExpressを使用してJSONを返す正しい方法
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み】構造体からフィールドを削除したり、JSONレスポンスでフィールドを隠したりする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UnicodeDecodeError: 'utf8' コーデックは位置3131のバイト0x80をデコードできません: 不正なスタートバイトです
-
[解決済み] VSCodeでlaunch.jsonに環境変数を追加する方法
-
[解決済み] Golang json Unmarshal "予期せぬJSON入力の終了"
-
[解決済み】GoでJSONのPost Requestを処理する
-
[解決済み】JSON-ObjectでTypeScriptオブジェクトを初期化する方法は?
-
[解決済み】JSONの構文では、オブジェクト内のキーの重複は許されるのか?
-
[解決済み】文字列のJSON配列はどのように表現するのですか?
-
[解決済み】JSONは"["で始めることができますか?
-
[解決済み】JSON文字列を辞書に変換する方法は?
-
[解決済み】REST API - ファイル(画像)処理 - ベストプラクティス