将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

开发中需要将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":卡卡


目录
相关文章
|
10月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
414 4
|
JSON 人工智能 Go
在Golang中序列化JSON字符串的教程
在Golang中,使用`json.Marshal()`可将数据结构序列化为JSON格式。若直接对JSON字符串进行序列化,会因转义字符导致错误。解决方案包括使用`[]byte`或`json.RawMessage()`来避免双引号被转义,从而正确实现JSON的序列化与反序列化。
745 7
|
XML JSON 前端开发
json字符串CSS格式化
完成以上步骤后,你便能在网页中看到格式化后的JSON数据,它们将按照CSS定义的样式进行展示,使数据更易于阅读和理解。通过有效地结合JSON和CSS,你可以创建出更加丰富且易于交互的网页内容。
613 64
|
JSON JavaScript 前端开发
处理从API返回的JSON数据时返回Unicode编码字符串怎么处理
在处理API返回的JSON数据时,遇到类似`\u7f51\u7edc\u8fde\u63a5\u9519\u8bef`的Unicode编码字符串,可使用JavaScript内置方法转换为可读文字。主要方法包括:1. 使用`JSON.parse`自动解析;2. 使用`decodeURIComponent`和`escape`组合解码;3. 在API调用中直接处理响应数据。这些方法能有效处理多语言内容,确保正确显示非ASCII字符。
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
2376 7
|
XML JSON 前端开发
json字符串CSS格式化
json字符串CSS格式化
436 5
|
JSON Go 数据格式
Go实现json字符串与各类struct相互转换
文章通过Go语言示例代码详细演示了如何实现JSON字符串与各类struct之间的相互转换,包括结构体对象生成JSON字符串和JSON字符串映射到struct对象的过程。
502 1
|
JSON 数据格式 Python
6-1|Python如何将json转化为字符串写到文件内 还保留json格式
6-1|Python如何将json转化为字符串写到文件内 还保留json格式
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
2309 1
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。

热门文章

最新文章