Gson之实例五

前面四篇博客基本上可以满足我们处理的绝大多数需求,但有时项目中对json有特殊的格式规定.比如下面的json串解析:

[{"tableName":"students","tableData":[{"id":1,"name":"李坤","birthDay":"Jun 22, 2012 9:54:49 PM"},{"id":2,"name":"曹贵生","birthDay":"Jun 22, 2012 9:54:49 PM"},{"id":3,"name":"柳波","birthDay":"Jun 22, 2012 9:54:49 PM"}]},{"tableName":"teachers","tableData":[{"id":1,"name":"米老师","title":"教授"},{"id":2,"name":"丁老师","title":"讲师"}]}]

分析之后我们发现使用前面博客中用到的都不好处理上面的json串.请看本文是如何处理的吧:

实体类:

1import java.util.Date; 2public class Student { 3 private int id; 4 private String name; 5 private Date birthDay; 6 public int getId() { 7 return id; 8 } 9 public void setId(int id) { 10 this.id = id; 11 } 12 public String getName() { 13 return name; 14 } 15 public void setName(String name) { 16 this.name = name; 17 } 18 public Date getBirthDay() { 19 return birthDay; 20 } 21 public void setBirthDay(Date birthDay) { 22 this.birthDay = birthDay; 23 } 24 @Override 25 public String toString() { 26 return "Student [birthDay=" + birthDay + ", id=" + id + ", name=" 27 + name + "]"; 28 } 29} 30 31public class Teacher { 32 private int id; 33 private String name; 34 private String title; 35 public int getId() { 36 return id; 37 } 38 public void setId(int id) { 39 this.id = id; 40 } 41 public String getName() { 42 return name; 43 } 44 public void setName(String name) { 45 this.name = name; 46 } 47 public String getTitle() { 48 return title; 49 } 50 public void setTitle(String title) { 51 this.title = title; 52 } 53 @Override 54 public String toString() { 55 return "Teacher [id=" + id + ", name=" + name + ", title=" + title 56 + "]"; 57 } 58}

注意这里定义了一个TableData实体类:

1import java.util.List; 2public class TableData { 3 private String tableName; 4 private List tableData; 5 public String getTableName() { 6 return tableName; 7 } 8 public void setTableName(String tableName) { 9 this.tableName = tableName; 10 } 11 public List getTableData() { 12 return tableData; 13 } 14 public void setTableData(List tableData) { 15 this.tableData = tableData; 16 } 17} 18 19import java.util.ArrayList; 20import java.util.Date; 21import java.util.List; 22import com.google.gson.Gson; 23import com.google.gson.reflect.TypeToken; 24 25public class GsonTest5 {/*** @param args*/public static void main(String[] args) { 26    // 对象转为Json-->start 27    Student student1 = new Student(); 28    student1.setId(1); 29    student1.setName("李坤"); 30    student1.setBirthDay(new Date()); 31     32    Student student2 = new Student(); 33    student2.setId(2); 34    student2.setName("曹贵生"); 35    student2.setBirthDay(new Date()); 36     37    Student student3 = new Student(); 38    student3.setId(3); 39    student3.setName("柳波"); 40    student3.setBirthDay(new Date()); 41     42    List<Student> stulist = new ArrayList<Student>(); 43    stulist.add(student1); 44    stulist.add(student2); 45    stulist.add(student3); 46     47    Teacher teacher1 = new Teacher(); 48    teacher1.setId(1); 49    teacher1.setName("米老师"); 50    teacher1.setTitle("教授"); 51     52    Teacher teacher2 = new Teacher(); 53    teacher2.setId(2); 54    teacher2.setName("丁老师"); 55    teacher2.setTitle("讲师"); 56     57    List<Teacher> teacherList = new ArrayList<Teacher>(); 58    teacherList.add(teacher1); 59    teacherList.add(teacher2); 60     61    TableData td1 = new TableData(); 62    td1.setTableName("students"); 63    td1.setTableData(stulist); 64    TableData td2 = new TableData(); 65    td2.setTableName("teachers"); 66    td2.setTableData(teacherList); 67    List<TableData> tdList = new ArrayList<TableData>(); 68    tdList.add(td1); 69    tdList.add(td2); 70    Gson gson = new Gson(); 71    String s = gson.toJson(tdList); 72    System.out.println(s); 73    // 结果:[{"tableName":"students","tableData":[{"id":1,"name":"李坤","birthDay":"Jun 22, 2012 10:44:16 AM"},{"id":2,"name":"曹贵生","birthDay":"Jun 22, 2012 10:44:16 AM"},{"id":3,"name":"柳波","birthDay":"Jun 22, 2012 10:44:16 AM"}]},{"tableName":"teachers","tableData":[{"id":1,"name":"米老师","title":"教授"},{"id":2,"name":"丁老师","title":"讲师"}]}] 74    // 对象转为Json-->end// 75 ///////////////////////////////////////////////////////////////////// 76    // 将json转为数据-->start    List<TableData> tableDatas2 = gson.fromJson(s,new TypeToken<List<TableData>>() {}.getType()); 77    for (int i = 0; i < tableDatas2.size(); i++) { 78        TableData entityData = tableDatas2.get(i); 79        String tableName = entityData.getTableName(); 80        List tableData = entityData.getTableData(); 81        String s2 = gson.toJson(tableData); 82        // System.out.println(s2); 83        // System.out.println(entityData.getData()); 84         85            if (tableName.equals("students")) { 86                System.out.println("students"); 87                List<Student> retStuList = gson.fromJson(s2,new TypeToken<List<Student>>() { 88            }.getType()); 89         90             for (int j = 0; j < retStuList.size(); j++) { 91                System.out.println(retStuList.get(j)); 92                } 93            }else if (tableName.equals("teachers")) { 94            System.out.println("teachers");         95            List<Teacher> retTchrList = gson.fromJson(s2,new TypeToken<List<Teacher>>() {}.getType()); 96         97            for (int j = 0; j < retTchrList.size(); j++) { 98                System.out.println(retTchrList.get(j)); 99            }     100        } 101    } 102    // Json转为对象-->end 103    } 104}

输出结果:

[{"tableName":"students","tableData":[{"id":1,"name":"李坤","birthDay":"Jun 22, 2012 10:04:12 PM"},{"id":2,"name":"曹贵生","birthDay":"Jun 22, 2012 10:04:12 PM"},{"id":3,"name":"柳波","birthDay":"Jun 22, 2012 10:04:12 PM"}]},{"tableName":"teachers","tableData":[{"id":1,"name":"米老师","title":"教授"},{"id":2,"name":"丁老师","title":"讲师"}]}]studentsStudent [birthDay=Fri Jun 22 22:04:12 CST 2012, id=1, name=李坤]Student [birthDay=Fri Jun 22 22:04:12 CST 2012, id=2, name=曹贵生]Student [birthDay=Fri Jun 22 22:04:12 CST 2012, id=3, name=柳波]teachersTeacher [id=1, name=米老师, title=教授]Teacher [id=2, name=丁老师, title=讲师]
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

SpringBoot自定义序列化的使用方式

场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x