Gson が「BEGIN_ARRAY を期待していましたが、BEGIN_OBJECT でした」をスローする理由とその修正方法

Linda Hamilton
リリース: 2024-10-26 17:25:03
オリジナル
555 人が閲覧しました

Why Does Gson Throw

BEGIN_ARRAY を予期しましたが、行 1、列 2 で BEGIN_OBJECT でした

Gson を使用して JSON を解析しようとすると、次のようなエラーが発生することがあります。 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: BEGIN_ARRAY が予期されましたが、BEGIN_OBJECT でした。このエラーは、予想される JSON データの形式と受信データの実際の構造が一致していないことを示しています。

この問題の根本原因は、次の 2 行のコード間の不一致にあります。

List<Post> postsList = Arrays.asList(gson.fromJson(reader, Post[].class));
ログイン後にコピー

このコードは、JSON が [{"timeZoneId": ...}, ...] としてフォーマットされることを期待して、JSON を Post オブジェクトの配列に逆シリアル化しようとします。ただし、「{」と「}」の区切り文字が存在することからわかるように、提供される JSON は配列ではなくオブジェクトです。

このエラーを修正するには、コードを変更して JSON を正しく解析する必要があります。単一の Post オブジェクトとしての JSON。上記の行を次の行に置き換えます:

Post post = gson.fromJson(reader, Post.class);
ログイン後にコピー

この調整により、Gson は JSON を単一の Post オブジェクトに逆シリアル化し、BEGIN_ARRAY が期待されたが BEGIN_OBJECT エラーであったことを解決します。 JSON が Post クラスで timeZoneId フィールドで定義された構造に準拠していることを前提としていることに注意してください。 JSON に追加のフィールドまたは異なるフィールドが含まれている場合、それらを適切に処理するためにコードをさらに変更する必要がある場合があります。

以上がGson が「BEGIN_ARRAY を期待していましたが、BEGIN_OBJECT でした」をスローする理由とその修正方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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