Gson之实例五

Stella981
• 阅读 709

前面四篇博客基本上可以满足我们处理的绝大多数需求,但有时项目中对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串.请看本文是如何处理的吧:

实体类:

import java.util.Date;
public class Student {
 private int id;
 private String name;
 private Date birthDay;
 public int getId() {
 return id;
 }
 public void setId(int id) {
 this.id = id;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public Date getBirthDay() {
 return birthDay;
 }
 public void setBirthDay(Date birthDay) {
 this.birthDay = birthDay;
 }
 @Override
 public String toString() {
 return "Student [birthDay=" + birthDay + ", id=" + id + ", name="
 + name + "]";
 }
}

public class Teacher {
 private int id;
 private String name;
 private String title;
 public int getId() {
 return id;
 }
 public void setId(int id) {
 this.id = id;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getTitle() {
 return title;
 }
 public void setTitle(String title) {
 this.title = title;
 }
 @Override
 public String toString() {
 return "Teacher [id=" + id + ", name=" + name + ", title=" + title
 + "]";
 }
}

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

import java.util.List;
public class TableData {
 private String tableName;
 private List tableData;
 public String getTableName() {
 return tableName;
 }
 public void setTableName(String tableName) {
 this.tableName = tableName;
 }
 public List getTableData() {
 return tableData;
 }
 public void setTableData(List tableData) {
 this.tableData = tableData;
 }
}

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class GsonTest5 {/*** @param args*/public static void main(String[] args) {
    // 对象转为Json-->start
    Student student1 = new Student();
    student1.setId(1);
    student1.setName("李坤");
    student1.setBirthDay(new Date());
    
    Student student2 = new Student();
    student2.setId(2);
    student2.setName("曹贵生");
    student2.setBirthDay(new Date());
    
    Student student3 = new Student();
    student3.setId(3);
    student3.setName("柳波");
    student3.setBirthDay(new Date());
    
    List<Student> stulist = new ArrayList<Student>();
    stulist.add(student1);
    stulist.add(student2);
    stulist.add(student3);
    
    Teacher teacher1 = new Teacher();
    teacher1.setId(1);
    teacher1.setName("米老师");
    teacher1.setTitle("教授");
    
    Teacher teacher2 = new Teacher();
    teacher2.setId(2);
    teacher2.setName("丁老师");
    teacher2.setTitle("讲师");
    
    List<Teacher> teacherList = new ArrayList<Teacher>();
    teacherList.add(teacher1);
    teacherList.add(teacher2);
    
    TableData td1 = new TableData();
    td1.setTableName("students");
    td1.setTableData(stulist);
    TableData td2 = new TableData();
    td2.setTableName("teachers");
    td2.setTableData(teacherList);
    List<TableData> tdList = new ArrayList<TableData>();
    tdList.add(td1);
    tdList.add(td2);
    Gson gson = new Gson();
    String s = gson.toJson(tdList);
    System.out.println(s);
    // 结果:[{"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":"讲师"}]}]
    // 对象转为Json-->end//
 /////////////////////////////////////////////////////////////////////
    // 将json转为数据-->start    List<TableData> tableDatas2 = gson.fromJson(s,new TypeToken<List<TableData>>() {}.getType());
    for (int i = 0; i < tableDatas2.size(); i++) {
        TableData entityData = tableDatas2.get(i);
        String tableName = entityData.getTableName();
        List tableData = entityData.getTableData();
        String s2 = gson.toJson(tableData);
        // System.out.println(s2);
        // System.out.println(entityData.getData());
        
            if (tableName.equals("students")) {
                System.out.println("students");
                List<Student> retStuList = gson.fromJson(s2,new TypeToken<List<Student>>() {
            }.getType());
        
             for (int j = 0; j < retStuList.size(); j++) {
                System.out.println(retStuList.get(j));
                }
            }else if (tableName.equals("teachers")) {
            System.out.println("teachers");        
            List<Teacher> retTchrList = gson.fromJson(s2,new TypeToken<List<Teacher>>() {}.getType());
        
            for (int j = 0; j < retTchrList.size(); j++) {
                System.out.println(retTchrList.get(j));
            }    
        }
    }
    // Json转为对象-->end
    }
}

输出结果:

[{"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=讲师]
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Stella981 Stella981
2年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
2年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
ES6 新增的数组的方法
给定一个数组letlist\//wu:武力zhi:智力{id:1,name:'张飞',wu:97,zhi:10},{id:2,name:'诸葛亮',wu:55,zhi:99},{id:3,name:'赵云',wu:97,zhi:66},{id:4,na
Stella981 Stella981
2年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x