GSON 拋出「預期是 BEGIN_OBJECT 但實際上是 BEGIN_ARRAY」?
當嘗試使用 GSON 將 JSON 字串解析為物件清單時,您可能會遇到「預期的 BEGIN_OBJECT 但實際上是 BEGIN_ARRAY」 錯誤。當提供的 JSON 資料是一個數組,而您需要一個物件時,就會發生這種情況。
要解決此問題,您應該調整解析程式碼以適應陣列結構。以下是問題的細分和正確的解決方案:
問題:
提供的 JSON 資料是物件陣列而不是單一物件。但是,您的程式碼嘗試將其解析為單個對象,從而導致錯誤。
解決方案:
要修復它,您需要指定 JSON代表一個物件陣列。這可以透過修改程式碼將 JSON 解析為物件類別的陣列來完成:
ChannelSearchEnum[] enums = gson.fromJson(jstring, ChannelSearchEnum[].class);
這樣,GSON 就會正確地將 JSON 解析為 ChannelSearchEnum 物件的陣列。
替代解決方案:
為了獲得更大的靈活性,您可以使用TypeToken 類別來定義參數化類型對於您想要解析的集合,如下所顯示:
Type collectionType = new TypeToken<Collection<ChannelSearchEnum>>() {}.getType(); Collection<ChannelSearchEnum> enums = gson.fromJson(jstring, collectionType);
這個方法可讓您將JSON 解析為ChannelSearchEnum 物件的集合,該集合可以是List、Set或任何其他集合類型.
以上是為什麼 GSON 在解析 JSON 時會拋出'Expected BEGIN_OBJECT but was BEGIN_ARRAY”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!