首頁 >Java >java教程 >為什麼 GSON 在解析 JSON 時會拋出'Expected BEGIN_OBJECT but was BEGIN_ARRAY”?

為什麼 GSON 在解析 JSON 時會拋出'Expected BEGIN_OBJECT but was BEGIN_ARRAY”?

Barbara Streisand
Barbara Streisand原創
2024-12-21 16:38:10306瀏覽

Why Does GSON Throw

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

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