
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 サイトの他の関連記事を参照してください。