Android で GSON を使用して JSON データを解析する方法: エラー解決
Android で GSON を使用して JSON データを解析すると、エラーが発生する場合があります: "java.lang.IllegalStateException: BEGIN_OBJECT が予期されましたが、行 1 列 73 に NAME がありました。"このエラーは、JSON データの構文の問題、具体的には左中括弧の欠落を示します。
考えられる解決策
この問題を解決するには、JSON データが正しく設定されていることを確認してください。フォーマットされており、左中括弧と右中括弧の両方が含まれています。例:
<code class="json">{ "count": "12", "colbreak": 1, ... "seek": 0 }</code>
一般的な原因
このエラーの一般的な原因の 1 つは、ファイルに保存されている、またはサーバーから文字列としてダウンロードされた JSON データを受信していることです。 。このような場合、文字列が適切にエンコードまたはプレフィックスされていない可能性があり、解析エラーが発生する可能性があります。
カスタム クラスの変更
コードでは Java を使用しています。リフレクションを使用して、JSON データ構造を表すカスタム クラス GsonParse を作成します。このアプローチは一般的に推奨されません。代わりに、GsonParse のフィールドごとに明示的なゲッター メソッドとセッター メソッドを作成します。さらに、JSON プロパティ名と一致するように、クラス名とフィールド名に @SerializedName の注釈を付けます。
次に例を示します:
<code class="java">public class GsonParse { @SerializedName("count") private String count; @SerializedName("colbreak") private String colbreak; @SerializedName("name") private String name; @SerializedName("score") private String score; @SerializedName("Words") private List<Words> mWords = new ArrayList<>(); @SerializedName("seek") private String seek; // Add getters and setters here... }</code>
UTF-8 エンコーディング
JSON データが UTF-8 形式で適切にエンコードされていることを確認してください。 HTTP 経由で JSON データを受信する場合、サーバーは適切な Content-Type ヘッダー (例: 'application/json; charset=utf-8') で応答する必要があります。
改善された解析方法
Reader を使用する解析メソッドの改良版を次に示します。
<code class="java">public static <T> ArrayList<T> JsonParse(T t, Reader reader) { ArrayList<T> lcs = new ArrayList<>(); try { Gson gson = new Gson(); JsonReader jsonReader = new JsonReader(reader); jsonReader.beginObject(); while (jsonReader.hasNext()) { T cse = (T) gson.fromJson(jsonReader, t.getClass()); lcs.add(cse); } jsonReader.endObject(); jsonReader.close(); } catch (UnsupportedEncodingException | IOException e) { e.printStackTrace(); } return (ArrayList<T>) lcs; }</code>
使用法
このメソッドを使用するには、ソース (ファイルや HTTP 応答など) を取得し、それを JsonParse メソッドに渡します:
<code class="java">InputStream ims = assetManager.open("file.txt"); Reader reader = new InputStreamReader(ims, "UTF-8"); ArrayList<GsonParse> gsonObjects = JsonParse(new GsonParse(), reader);</code>
以上がAndroid で GSON を使用して JSON データを解析すると、「java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 columns 73」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。