首頁 > Java > java教程 > 主體

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

Barbara Streisand
發布: 2024-11-01 14:07:29
原創
976 人瀏覽過

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>
登入後複製

用法

用法
<code class="java">InputStream ims = assetManager.open("file.txt");
Reader reader = new InputStreamReader(ims, "UTF-8");

ArrayList<GsonParse> gsonObjects = JsonParse(new GsonParse(), reader);</code>
登入後複製
要使用此方法,請從您的來源(例如檔案或HTTP 回應)並將其傳遞給JsonParse 方法:

以上是在 Android 中使用 GSON 解析 JSON 資料時,為什麼會出現「java.lang.IllegalStateException:預期 BEGIN_OBJECT 但在第 1 行第 73 列為 NAME」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!