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