1. 程式人生 > >GsonConverterFactory封裝Gson解析丟擲 com.google.gson.internal.LinkedTreeMap cannot be cast to XXX

GsonConverterFactory封裝Gson解析丟擲 com.google.gson.internal.LinkedTreeMap cannot be cast to XXX

原因在於解析的JSON資料結構為無欄位名稱的二維陣列,解析資料時無法從 com.google.gson.internal.LinkedTreeMap強轉為XXX(標題中的data class),歸根到底就是,當二維陣列均無欄位名稱的時候,第二維資料就無法通過@SerializedName從json對映到相應的data class存放

 

  解析的JSON資料:

 

解決方法,伺服器把第二維資料放到一維顯示:

 

再修改相應程式碼,程式碼通過欄位為pic_list對映的一維陣列取出資料進行使用即可。

問題分析

問題產生的原因在於後臺人員出於“pic_list”欄位下要存放多張圖片的"Image_Url"等欄位鍵值,所以想法為一維資料作為

多張圖片存放的空間(區分),二維放資料就實現需求了。按照JSON的語法構建資料也不會出錯。但是在使用GsonConverterFactory封裝資料時就會出現com.google.gson.internal.LinkedTreeMap無法強轉為XXX 的錯誤,

個人推測可能GsonConverterFactory的處理邏輯是無法對映無欄位名的二維陣列的,這也符合實際需要的設計要求,

設想,如果你二維陣列的一二維度都沒有使用欄位名去賦予具體的實際意義,只是在第二維存放資料,那麼,是不是把

資料存放在第一維度,刪去第二維度就好了,你想要去區分已經放在一維的資料,給予特徵欄位或者新增屬於它的

屬性陣列就在一維資料下新增就好了,無需使用無欄位名的二維陣列。所以覺得日後在使用JSON時應該避免使用

無欄位名的二維陣列