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

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

  1. json字符串中key值下划线命名转换为驼峰命名

    json字符串中key值下划线命名转换为驼峰命名: 例如: public class JsonUtils {public final static void convert(Object json) ...

  2. 正则匹配json字符串中的key,将kebab-case转换为camelCase

    项目中遇到处理接口返回json的需求: 将json键中的kebab-case转换为camelCase 为解决需求进行了一系列学习,在此记录学习过程. 首先了解几种case: 命名法 camelCase ...

  3. Vue前后台数据交互实例演示,使用axios传递json字符串、数组

    Vue 前后台数据交互实例演示 第一章:后台实现 ① Python 启用 Flask 服务器 ② 后台启用成功验证 第二章:前台实现 ① Vue 使用 Axios 实现接收 json 字符串.数组数据 ...

  4. Jackson第二篇【从JSON字符串中取值】

    来源:http://blog.csdn.net/songyongfeng/article/details/6932674 第一篇咱们主要学习了实体与json的相互转换的问题,但是咱们需要的是数据 你转 ...

  5. JS解析json数据(json字符串和数组之间相互转换)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  6. Newtonsoft.Json取json字符串中的值得用法 这里是取的时候

    Newtonsoft.Json取json字符串中的值得用法 看红色的部分就可以了 http://www.cnblogs.com/fierceeagle/p/3545615.html <%@ We ...

  7. php 去掉转义引号的反斜杠,PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠...

    PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠 通过AJAX传到PHP的json字符串有时候加上反斜杠"\"来转义,PHP处理时需要先去掉反斜杠,然后再json_dec ...

  8. php将数组转化成json字符串,php数组如何转换json字符串

    php数组转换json字符串的方法:首先创建一个php示例文件:然后定义一组数组数据:最后通过"json_encode($color)"方法将数组转换成json字符串即可. PHP ...

  9. 将字符串中的数字字符转换为对应的数字,并且求和输出

    问题描述 用一个函数fun将字符串中的数字字符转换为对应的数字,计算出这些数值的累计和,然后作为函数值返回. 例如:形参s的字符串为:I have 66 dollars.输出结果为12. 程序代码 # ...

最新文章

  1. has no attribute 'xw_plus_b'
  2. 6. H.264/AVC编码器原理
  3. 数据库-多条件查询-优先级
  4. spring boot分层_只需5分钟即可启动并运行分层架构:: Spring Boot第1部分
  5. Linux 中统计一个进程的线程数
  6. [C] strncpy 函数
  7. Light Field 光场以及Matlab光场工具包(LightField ToolBox)的使用说明
  8. python_文件处理模式
  9. php中百度编辑器的使用
  10. IDL调用ENVI-FLAASH大气校正异常退出解决办法
  11. 【转载】MAC OS X常用快捷键
  12. 申请 app store 退款
  13. 时序分析基本概念介绍--Timing Arc
  14. python神经网络构建图_如何用卷积神经网络构建图像?
  15. Mackbook 外接移动硬盘无法写入数据(三种解决办法)
  16. JSON数据导出Excel表
  17. 从零开始写JavaScript框架(一)
  18. 关键字是什么?如何优化网站关键字?
  19. 关于_CameraDepthTexture的疑惑
  20. 面向对象以及三大特性

热门文章

  1. linux 中文 bterm fbterm 内核,完美中文tty, fbterm+yong(小小输入法)
  2. 世界有时候是很大的,而胸怀也要宽大一些为好
  3. 机器学习(4)——手写识别系统实例
  4. 微机原理学习笔记——中断系统
  5. linux有什么作用
  6. 微服系列之雪崩效应的解决方案
  7. Mono-mbe版本编译libmonobdwgc-2.0.so
  8. 史上最全的Staking上车指南
  9. 网络安全单兵工具 -- YAKIT
  10. python for循环读取excel表格