解析Json,出現Array&Object衝突
網路框架用的OkHttpUtils
Gson gson =new Gson();
Type type =new TypeToken>(){}.getType();
bannerList = gson.fromJson(response,type);
問題:報錯EXPECTED BEGIN_ARRAY BUT WAS BEGIN_OBJECT
原因:response(網路響應資料)是object型別,這裡卻用瞭解析Array的方式解析,導致衝突--報錯。
解決方式一: jsonObject --> jsonArray --> gson.fromJson
根據報錯,我們就把json資料的“data”開啟-->獲得jsonArray,最後再用 gson.fromJson解析成list

注意這裡 gson.fromJson(response,Type<>),第二個引數是反射type
注意這種方法的實體類 Banner
沒有內部巢狀類

解決方式二: json ----解析成----> JavaBean ----取出----> list
這種不能用反射Type

注意這裡 gson.fromJson(response,Bean.class),第二個引數是類
實體類BannerTest

區別:法一在於jsonObject-jsonArray-list.對json處理。
法二在於json-bean類-list。即在問題的基礎上新增getData()即可。
步驟數差不多,關鍵是具體步驟的處理複雜度。法二的確在處理上簡單不少o(* ̄︶ ̄*)o
1.實體類,第一種沒有內部巢狀類,第二種有內部巢狀類-->用於從bean類中取出list 。 如下圖

圖一

圖二
圖一中的getData() 對應到圖二的 List<DataBean>型的getData()方法,獲取返回的資料,從而實現從bean類中取出list。
2.第一種方法的fromJson()方法,第二個引數得用 Type type =new TypeToken<List<Banner>>(){}.getType()
第二種方法的fromJson方法,第二個引數直接寫對應的實體類即可。
3.方法一:需要將json一層一層開啟,最後解析到定義的list中,這裡的例子是bannerList。
方法二:直接將json解析到javaBean類中,然後從中取出list。需要實體類中定義內部類並有它的List<T>的get方法獲取資料。
好,迷了我一天一夜的問題解決了,2個解決方法是問的2個人,他們回答你的時候並不是直接告訴你怎麼做,都是告訴你處理方法,具體還是看自己(^U^)ノ~YO。咱程式員就是不一樣^_^