开发中需要将json中节点单独取出某个节点,解析获取数据,此处对json字符串节点中数组节点,转换为泛型list集合,使用gson。
google的gson的pom文件和jar:gson
代码如下:
package my.demo.java.z.generic; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; /** * Gson获取json中的数组节点.<br/> * 将数组节点转换为list集合<泛型>.<br/> * 泛型类,是在实例化类的时候指明泛型的具体类型.<br/> * 泛型方法,是在调用方法的时候指明泛型的具体类型.<br/> * @author Tony_tian * @time 2016-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; } @Override public 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":卡卡