預期為BEGIN_ARRAY,但在第1 行第2 列為BEGIN_OBJECT
嘗試使用Gson 解析JSON 時,可能會出現錯誤,指示:「 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:預期為BEGIN_ARRAY,但實際為BEGIN_OBJECT。」此錯誤表示JSON 資料的預期格式與接收到的資料的實際結構不符。
此問題的根本原因在於以下兩行程式碼之間的差異:
List<Post> postsList = Arrays.asList(gson.fromJson(reader, Post[].class));
此程式碼嘗試將JSON 反序列化為Post 物件數組,期望JSON 格式為[{" timeZoneId": ...}, ...]。但是,提供的 JSON 是一個對象,而不是數組,這可以透過「{」和「}」分隔符號的存在來證明。
要修正此錯誤,需要修改程式碼以正確解析JSON 作為單一 Post 物件。將上面提到的行替換為以下內容:
Post post = gson.fromJson(reader, Post.class);
透過此調整,Gson 會將 JSON 反序列化為單一 Post 對象,解決 Expected BEGIN_ARRAY but was BEGIN_OBJECT 錯誤。請注意,它假定 JSON 符合 Post 類別中定義的結構,並帶有 timeZoneId 欄位。如果 JSON 包含其他或不同的字段,則程式碼可能需要進一步修改才能正確處理它們。
以上是為什麼 Gson 會拋出'預期是 BEGIN_ARRAY 但實際上是 BEGIN_OBJECT”以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!