1. ホーム
  2. json

[解決済み] Golang json Unmarshal "予期せぬJSON入力の終了"

2022-03-01 18:16:09

質問

私はHTTPレスポンスからJSONデータをパースするいくつかのコードに取り組んでいます。私が持っているコードは、次のようなものです。

type ResultStruct struct {
    result []map[string]string
}

var jsonData ResultStruct
err = json.Unmarshal(respBytes, &jsonData)

のjsonは respBytes 変数は次のようになります。

{
 "result": [
  {
   "id": "ID 1"
  },
  {
   "id": "ID 2"
  }
 ]
}

しかし err はnilではありません。これをプリントアウトすると unexpected end of JSON input . これは何が原因なのでしょうか?JSONは有効なようです。このエラーは、私のカスタム構造体と関係があるのでしょうか?

ありがとうございました。

どのように解決するのですか?

その unexpected end of JSON input の結果です。 構文エラー は、JSON 入力に含まれる (おそらく " , } または ] ). このエラーは、デコード先の値の型には依存しません。

例のJSON入力でコードを実行したところ プレイグラウンドで . エラーなしで実行されます。

のため、コードは何もデコードしません。 result フィールドはエクスポートされません。結果フィールドをエクスポートした場合。

type ResultStruct struct {
   Result []map[string]string
}

とすると、入力は次のようにデコードされます。 プレイグラウンドの例 .

アプリケーションでレスポンスボディ全体を読み取っていないのではと推測されます。JSON入力を使用してデコードすることをお勧めします。

err := json.NewDecoder(resp.Body).Decode(&jsonData)

デコーダはレスポンスボディから直接読み取る。