首頁  >  文章  >  Java  >  在 Android 中使用 GSON 解析 JSON 資料時,為什麼會出現「java.lang.IllegalStateException:預期 BEGIN_OBJECT 但在第 1 行第 73 列為 NAME」錯誤?

在 Android 中使用 GSON 解析 JSON 資料時,為什麼會出現「java.lang.IllegalStateException:預期 BEGIN_OBJECT 但在第 1 行第 73 列為 NAME」錯誤?

Barbara Streisand
Barbara Streisand原創
2024-11-01 14:07:29978瀏覽

Why am I getting the

如何在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>

常見原因

此錯誤的一個常見原因是接收儲存在檔案中或作為字串從伺服器下載的 JSON 資料。在這種情況下,字串可能未正確編碼或添加前綴,這可能會導致解析錯誤。

自訂類別修改

在您的程式碼中,您正在使用 Java反射建立自訂類別 GsonParse 來表示 JSON 資料結構。一般不推薦這種方法。相反,為 GsonParse 中的每個欄位建立明確的 getter 和 setter 方法。此外,使用 @SerializedName 註解類別和欄位名稱以符合 JSON 屬性名稱。

以下範例:

<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 回應)建立Reader 並將其傳遞給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:預期 BEGIN_OBJECT 但在第 1 行第 73 列為 NAME」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn