将json字符串中数组节点转换为泛型list集合(gson)
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
开发中需要将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":卡卡
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献7条内容
所有评论(0)