1、json字符串转list
ArrayList<NodeBean> nodeList = (ArrayList<NodeBean>) new Gson().fromJson( selectNextNodeRspMsg.getRSP_BODY().getResultObject().toString(), new TypeToken<ArrayList<NodeBean>>() { }.getType());
返回值是new TypeToken<ArrayList<NodeBean>>() {}.getType()); 的类型
1、泛型使用
没有引入泛型之前时写法:
public class UserResult { public int code; public String message; public User data; } //========= public class UserListResult { public int code; public String message; public List<User> data; } //========= String json = "{..........}"; Gson gson = new Gson(); UserResult userResult = gson.fromJson(json,UserResult.class); User user = userResult.data; UserListResult userListResult = gson.fromJson(json,UserListResult.class); List<User> users = userListResult.data;
上面有两个类UserResult
和UserListResult
,有两个字段重复,一两个接口就算了,如果有上百个怎么办?不得累死?所以引入泛型。
//不再重复定义Result类 Type userType = new TypeToken<Result<User>>(){}.getType(); Result<User> userResult = gson.fromJson(json,userType); User user = userResult.data; Type userListType = new TypeToken<Result<List<User>>>(){}.getType(); Result<List<User>> userListResult = gson.fromJson(json,userListType); List<User> users = userListResult.data;
看出区别了么?引入了泛型之后虽然要多写一句话用于获取泛型信息,但是返回值类型很直观,也少定义了很多无关类。
你真的会用Gson吗?Gson使用指南(一) https://www.jianshu.com/p/e740196225a4
你真的会用Gson吗?Gson使用指南(二) https://www.jianshu.com/p/c88260adaf5e
你真的会用Gson吗?Gson使用指南(三)
你真的会用Gson吗?Gson使用指南(四)