ホームページ > Java > &#&チュートリアル > GSON が JSON を解析するときに「BEGIN_OBJECT を期待していましたが、BEGIN_ARRAY でした」というメッセージをスローするのはなぜですか?

GSON が JSON を解析するときに「BEGIN_OBJECT を期待していましたが、BEGIN_ARRAY でした」というメッセージをスローするのはなぜですか?

Barbara Streisand
リリース: 2024-12-21 16:38:10
オリジナル
301 人が閲覧しました

Why Does GSON Throw

GSON Throwing "BEGIN_OBJECT が期待されましたが、BEGIN_ARRAY でした"?

GSON を使用して JSON 文字列をオブジェクトのリストに解析しようとすると、 「BEGIN_OBJECT を予期していましたが、BEGIN_ARRAY でした」というエラーが発生する可能性があります。 エラー。これは、オブジェクトを予期しているのに、提供された JSON データが配列である場合に発生します。

この問題を解決するには、配列構造に合わせて解析コードを調整する必要があります。問題の内訳と適切な解決策は次のとおりです。

問題:

提供される JSON データは、単一のオブジェクトではなく、オブジェクトの配列です。ただし、コードは単一のオブジェクトとして解析しようとするため、エラーが発生します。

解決策:

これを修正するには、JSON がオブジェクトの配列を表します。これは、JSON をオブジェクト クラスの配列に解析するようにコードを変更することで実行できます。

ChannelSearchEnum[] enums = gson.fromJson(jstring, ChannelSearchEnum[].class);
ログイン後にコピー

この方法では、GSON は JSON を ChannelSearchEnum オブジェクトの配列として正しく解析します。

代替解決策:

柔軟性を高めるために、TypeToken クラスを使用して、以下に示すように、解析するコレクションのパラメーター化された型を定義します。

Type collectionType = new TypeToken<Collection<ChannelSearchEnum>>() {}.getType();
Collection<ChannelSearchEnum> enums = gson.fromJson(jstring, collectionType);
ログイン後にコピー

このアプローチにより、JSON を ChannelSearchEnum オブジェクトのコレクションに解析できます。このコレクションは、List、Set、または他のコレクションタイプ。

以上がGSON が JSON を解析するときに「BEGIN_OBJECT を期待していましたが、BEGIN_ARRAY でした」というメッセージをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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