前面四篇博客基本上可以满足我们处理的绝大多数需求,但有时项目中对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=讲师]