JSON 解析之 GSON 解析Java 对象的 List(多层json)
前言:看了好多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());
这里一定要解析对应明白要不一直报错,我感觉之前没错,可总是错。
更多推荐
所有评论(0)