1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 将json字符串中数组节点转换为泛型list集合(gson)

将json字符串中数组节点转换为泛型list集合(gson)

时间:2019-11-24 10:58:17

相关推荐

将json字符串中数组节点转换为泛型list集合(gson)

开发中需要将json中节点单独取出某个节点,解析获取数据,此处对json字符串节点中数组节点,转换为泛型list集合,使用gson。

google的gson的pom文件和jar:gson

代码如下

package my.demo.java.z.generic;import java.util.ArrayList;import java.util.List;import mons.lang3.StringUtils;import com.google.gson.GsonBuilder;import com.google.gson.reflect.TypeToken;/*** Gson获取json中的数组节点.<br/>* 将数组节点转换为list集合<泛型>.<br/>* 泛型类,是在实例化类的时候指明泛型的具体类型.<br/>* 泛型方法,是在调用方法的时候指明泛型的具体类型.<br/>* @author Tony_tian* @time -03-15 09:44:32* */public class GenericMethodsJson2List {public static final String START_ARRAY = "[";public static final String END_ARRAY = "]";/*** Gson获取json中的数组节点.转换为list集合<泛型>.<br/>* @param <T> 声明一个泛型T* @param List<T> 指明该方法的返回值为泛型T代表类型的list集合* @param jsonStr json中的数组节点* @param tC 指明泛型T的具体类型,用来创建泛型T代表的类的对象* @return 1:正常返回泛型代表具体类型的list集合,2:转换错误则返回null* */@SuppressWarnings("unchecked")public static final <T> List<T> json2listT(String jsonStr, Class<T> tC) {//json字符串不能为空if(StringUtils.isBlank(jsonStr)) return null;//json字符串必须为数组节点类型if(!(jsonStr.startsWith(START_ARRAY) && jsonStr.endsWith(END_ARRAY))) return null;List<T> listT = null;try {//创建泛型对象T t = tC.newInstance();//利用类加载加载泛型的具体类型Class<T> classT = (Class<T>) Class.forName(t.getClass().getName());List<Object> listObj = new ArrayList<Object>();//将数组节点中json字符串转换为object对象到Object的list集合listObj = new GsonBuilder().create().fromJson(jsonStr, new TypeToken<List<Object>>(){}.getType());//转换未成功if(listObj == null || listObj.isEmpty()) return null;listT = new ArrayList<T>();//将Object的list中的的每一个元素中的json字符串转换为泛型代表的类型加入泛型代表的list集合返回for (Object obj : listObj) {T perT = new GsonBuilder().create().fromJson(obj.toString(), classT);listT.add(perT);}} catch (Exception e) {e.printStackTrace();}return listT;}public static void main(String[] args) {String jsonStr = "[{\"username\":\"点点\",\"memberNo\":1},{\"username\":\"didi\",\"memberNo\":2},{\"username\":\"卡卡\",\"memberNo\":3}]";List<Member> listp = json2listT(jsonStr, Member.class);for (Member member : listp) {System.out.println(member.toString());}}}class Member{private Integer memberNo;private String username;public Integer getMemberNo() {return memberNo;}public String getUsername() {return username;}public void setMemberNo(Integer memberNo) {this.memberNo = memberNo;}public void setUsername(String username) {this.username = username;}@Overridepublic String toString() {StringBuilder su = new StringBuilder();su.append("\"memberNo\"").append(":").append(this.getMemberNo());su.append(",").append("\"username\"").append(":").append(this.getUsername());return su.toString();}}

main执行结果

"memberNo":1,"username":点点"memberNo":2,"username":didi"memberNo":3,"username":卡卡

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。