Android で GSON を使用してネストされた JSON を解析するときに発生する「BEGIN_OBJECT が予期されましたが、NAME でした」エラーを修正する方法

DDD
リリース: 2024-10-28 10:18:02
オリジナル
903 人が閲覧しました

How to Fix the

Android での GSON を使用した JSON 解析

Android で GSON を使用した JSON 解析を簡素化するにはどうすればよいですか? GSON を使用する際の一般的な問題を調べ、段階的な解決策を詳しく見てみましょう。

問題ステートメント:

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

JSON の例:

次の JSON データを考えてみましょう:

<code class="json">{
    "count": "12",
    "colbreak": 1,
    "name": "unary rels",
    "score": "9090",
    "Words": [
        {
            "count": 6,
            "word": "prp_għaċ-",
            "name": "prp_għaċ-",
            "score": 9.1,
            "Words": "kol",
            "seek": 2231297
        }
    ],
    "seek": 0
}</code>
ログイン後にコピー

コード:

解析に GSON を使用するコード:

<code class="java">public static <T> ArrayList<T> JsonParse(T t, String response) {
    // ...
    while (reader.hasNext()) {
        T cse = (T) gson.fromJson(reader, t.getClass());
        lcs.add(cse);
    }
    // ...
}</code>
ログイン後にコピー

エラー:

これを実行していますコードでは次のようなエラーが発生する可能性があります:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 column 73
ログイン後にコピー

解決策:

このエラーを解決するには、JSON 値の読み取り方法を変更する必要があります。 JSON 文字列全体をループするのではなく、解析したい特定のオブジェクトまでスキップして、それをデコードする必要があります。

改訂されたメソッド:

修正されたバージョンは次のとおりです。 JsonParse メソッドの:

<code class="java">public static <T> ArrayList<T> JsonParse(T t, String response) {
    // ...
    while (reader.hasNext()) {
        String name = reader.nextName();
        if (name.equals("Words")) {
            reader.beginArray();
            while (reader.hasNext()) {
                T cse = (T) gson.fromJson(reader, t.getClass());
                lcs.add(cse);
            }
            reader.endArray();
        } else {
            reader.skipValue();
        }
    }
    // ...
}</code>
ログイン後にコピー

説明:

この改訂されたメソッドでは、コードは現在の JSON 名が "Words" かどうかを確認し、そうである場合はコードを開始します。配列を読み取っています。次に、配列内の各オブジェクトをループし、GSON を使用してオブジェクトを解析し、リストに追加します。 「count」や「score」などの他の JSON 名については、メソッドはそれらをスキップします。

追加の考慮事項:

  • モデル クラス (GsonParse および Words) には、すべての JSON フィールドのゲッターとセッターがあります。
  • アセット フォルダー内のファイルから JSON を読み取る場合は、JsonReader の代わりに必ず InputStreamReader を使用してください。
  • UTF-8 文字をサポートするには、解析する前に JSON 文字列を UTF-8 に変換します。

以上がAndroid で GSON を使用してネストされた JSON を解析するときに発生する「BEGIN_OBJECT が予期されましたが、NAME でした」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!