首頁  >  文章  >  Java  >  為什麼 Gson 會拋出“預期是 BEGIN_ARRAY 但實際上是 BEGIN_OBJECT”以及如何修復它?

為什麼 Gson 會拋出“預期是 BEGIN_ARRAY 但實際上是 BEGIN_OBJECT”以及如何修復它?

Linda Hamilton
Linda Hamilton原創
2024-10-26 17:25:03473瀏覽

Why Does Gson Throw

預期為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中文網其他相關文章!

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