前言:看了好多gson解析多層json的博客都不盡如人意,都在jsonbean這就結束了,我想要後面將json轉換成對象的部分啊
於是自己動手豐衣足食,我終於讓我在龐大的雲盤庫裏找到了,開心。但是我還是不熟悉多層,我多解析結果數據。
一組接口json的數據:
1.定義一個bean:
Androidstudio 有插件GsonFormat,下載後重啓。
實現方式:新建一個java類,右鍵“Generate...”
,選擇“GsonFormat”
,將json數據複製到輸入框,點擊“OK”
,即可生成一個bean,如下所示:
package com.example.informationdome;
import java.util.List;
class AppBean {
private List<GrandsonCategoryBean> grandsonCategory;
public List<GrandsonCategoryBean> getGrandsonCategory() {
return grandsonCategory;
}
public void setGrandsonCategory(List<GrandsonCategoryBean> grandsonCategory) {
this.grandsonCategory = grandsonCategory;
}
public static class GrandsonCategoryBean {
/**
* id : 2248
* name : 洗髮護髮
* link :
*/
private String id;
private String name;
private String link;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
}
}
太不容易了,解析多層json 。只限於該json,不過反應過來了。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "log";
TextView responseText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
responseText = (TextView) findViewById(R.id.response_text);
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
OkHttpClient client = new OkHttpClient();
// post請求
RequestBody requestBody = new FormBody.Builder()
.add("type","1")
.build();
Request request = new Request.Builder()
.url(" 你的api url")
.post(requestBody)
.build();
Response response = client.newCall(request).execute();
String responseData = response.body().string();
//根據格式通過JSONObject和JSONArray進行轉換
JSONObject jsonObject = new JSONObject(responseData);
JSONArray jsonArray = jsonObject.getJSONArray("grandsonCategory");
// showResponse(jsonArray.toString());
Gson gson=new Gson();
List<JsonBean.GrandsonCategoryBean> grandsonCategoryBeans=gson.fromJson(jsonArray.toString(),new TypeToken<List<JsonBean.GrandsonCategoryBean>>(){}.getType());
for (int i=0;i<grandsonCategoryBeans.size();i++){
Log.i(TAG,grandsonCategoryBeans.get(i).getId());
Log.i(TAG,grandsonCategoryBeans.get(i).getName());
Log.i(TAG,grandsonCategoryBeans.get(i).getLink());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null) {
connection.disconnect();
}
}
}
}).start();
}
}
將 json 格式的字符串[]轉換爲 Java 對象的 List
1)用到的 API T fromJson(String json, Type typeOfT);//將 json 數組轉換爲 Java 對象的 list 注意:要求 json 對象中的 key 的名稱與 java 對象對應的類中的屬性名要相同
2)使用步驟
(1)將 Gson 的 jar 包導入到項目中
(2)創建Gson對象 : Gson gson = new Gson();
(3)通過創建的Gson對象調用fromJson()方法,返回該JSON數據對應的Java集合:
List<JsonBean.GrandsonCategoryBean> grandsonCategoryBeans=gson.fromJson(jsonArray.toString(),new TypeToken<List<JsonBean.GrandsonCategoryBean>>(){}.getType());
這裏一定要解析對應明白要不一直報錯,我感覺之前沒錯,可總是錯。