将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 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":卡卡
时间: 2024-10-28 16:56:50

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

java json字符串解析,获取json字符串中数组的值

问题描述 java json字符串解析,获取json字符串中数组的值 {"arr":["ipAddr","installationSite","imineSystemId","valid"],"login":0,"password":"","purview":"","userId":0,&

android-转换数组中的JSON字符串为数组

问题描述 转换数组中的JSON字符串为数组 下面的字符串是作为json对象获取的: [ { "id": "picture1", "caption": "sample caption", "picname": "sample picture name" } ] 然后将它转换到数组中,这样可以填充到列表中. JSONArray myjsonarray = myjson.toJSONArray

PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠_php实例

通过AJAX传到PHP的json字符串有时候加上反斜杠"\"来转义,PHP处理时需要先去掉反斜杠,然后再json_decode. $str = stripslashes($_POST['json']); $arr = json_decode($str,true); PS:php get抓取json怎样去除双引号前面的反斜杠 你这个不算标准的JSON格式数据,可以先将\"替换成"即可. 再用json_decode()系统函数将其转为json对象,如需转为数组加上第二个

json串 反序列化-如果获得的Json字符串中的Key名称与自定义的属性名字不同,怎样反序列化这个json串

问题描述 如果获得的Json字符串中的Key名称与自定义的属性名字不同,怎样反序列化这个json串 如题,如过我得到的json串类似是{"error_info":"1"},如果用JavaScriptSerializer的Deserialize方法,定义的属性名必须也叫error_info,如果我想使用属性名ErrorInfo这种,有没有什么系统方法可以将这个json串中的error_info 反序列化为ErrorInfo 解决方案 没遇见过这种需求的...一般都是先

JS遍历Json字符串中键值对先转成JSON对象再遍历_javascript技巧

1.将Json字符串转换成JSON对象 var t='{"firstName": "cyra", "lastName": "richardson"}'; var obj = eval('(' + t + ')'); 2.遍历读取键值对 for(var str in obj){ alert(str+'='+obj[str]); } 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使

求一个正则表达式 替换json字符串中的指定键值对

问题描述 {"name":"zhangsan","id":1042732,"type":"2","status":0,"password":"123456789"}如何把其中的type 键值替换成空 我需要一个{"name":"zhangsan","id":1042732,"st

json null- json字符串中存在值为null的情况,怎样在转换为Object的时候将值为null的替换为空

问题描述 json字符串中存在值为null的情况,怎样在转换为Object的时候将值为null的替换为空 json格式:{"key1":"aaa","key2":null,"key3":null},在将JSON转为Object的时候, 怎样将key2和key3的值null改为空

jquery的$getjson调用并获取远程的JSON字符串问题_javascript技巧

代码如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equ

json字符串转对象很慢

问题描述 json字符串中的value值是这样得到的:是将图片通过Convert.ToBase64String(MyData)得到得,图片大小为400k,这样得到的字符串很长,Employeeemployee=(Employee)Newtonsoft.Json.JavaScriptConvert.DeserializeObject(json,typeof(Employee));但执行上面一行代码时相当慢,请问有何优化的办法,谢谢!!! 解决方案 解决方案二:该回复于2016-03-28 00:0