通透Gson@Expose注解、@SerializedName、解析json数据

在讲如何解析数据之前,先描述一下gson中的两个注解@Expose和@SerializedName。

@Expose注解的作用:区分实体中不想被序列化的属性,,其自身包含两个属性deserialize(反序列化)和serialize(序列化),默认都为true。

使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();创建Gson对象,没有@Expose注释的属性将不会被序列化.。

private class User{private int id;@Exposeprivate String name;…….}这样create() gson对象序列化user,只会有name这一个属性

@SerializedName注解的作用:定义属性序列化后的名称

public class User{private int id;@Expose@SerializedName("username")private String name;…….}

另外想要不序列化某个属性,也可以使用transient。

private class User{private int id;private transient String name;…….}下面列举一下gson如何解析json数据的

//转换器GsonBuilder builder = new GsonBuilder();<span style="color:#ff0000;">// 不转换没有 @Expose 注解的字段</span>builder.excludeFieldsWithoutExposeAnnotation();Gson gson = builder.create();<span style="color:#ff0000;">//1、对象转string</span>Student stu = new Student();stu.setStudentId(333);stu.setStudentName("qqq");String stuStr = gson.toJson(stu);System.out.println(stuStr); //{"studentName":"qqq","studentId":333}<span style="color:#ff0000;">//2、string转对象</span>Student user2 = gson.fromJson(stuStr, Student.class);System.out.println(user2);String stuTemp = "{\&;studentName\&;:\&;qqq2\&;,\&;studentId\&;:3335}";Student user4 = gson.fromJson(stuTemp, Student.class);System.out.println(user4);<span style="color:#ff0000;">//3、对象List转string</span>List<Student> testBeanList = new ArrayList<Student>();Student testBean = new Student();testBean.setStudentId(555);testBean.setStudentName("552");testBeanList.add(testBean);//Gson gsonList = new Gson();Type type = new TypeToken<List<Student>>(){}.getType(); //指定集合对象属性String beanListToJson = gson.toJson(testBeanList, type);System.out.println(beanListToJson); //[{"studentName":"552","studentId":555}]<span style="color:#ff0000;">//集合string转对象list</span>List<Student> testBeanListFromJson = gson.fromJson(beanListToJson, type);System.out.println(testBeanListFromJson); //[555:552]<span style="color:#ff0000;">//4、集合如果不指定类型 默认为String</span>List<String> testList = new ArrayList<String>();testList.add("first");testList.add("second");String listToJson = gson.toJson(testList);System.out.println(listToJson); //["first","second"]<span style="color:#ff0000;">//5、集合字符串转回来需要指定类型</span>List<String> testList2 = (List<String>) gson.fromJson(listToJson,new TypeToken<List<String>>() {}.getType());System.out.println(testList2);<span style="color:#ff0000;">//6、 将HashMap字符串转换为 JSON</span>Map<String, String> testMap = new HashMap<String, String>();testMap.put("id", "id.first");testMap.put("name", "name.second");String mapToJson = gson.toJson(testMap);System.out.println(mapToJson); //{"id":"id.first","name":"name.second"}<span style="color:#ff0000;">//7、stringMap转对象</span>Map<String, String> userMap2 = (Map<String, String>) gson.fromJson(mapToJson,new TypeToken<Map<String, String>>() {}.getType());System.out.println(userMap2); //{id=id.first, name=name.second}<span style="color:#ff0000;">//8、对象含有普通对象、集合、map情况</span>Student user1 = new Student();user1.setStudentId(1001);user1.setStudentName("张三");Student user3 = new Student();user3.setStudentId(1002);user3.setStudentName("李四");Map<String, Student> userMap = new HashMap<String, Student>();userMap.put("user1", user1);userMap.put("user3", user3);List<Student> userList = new ArrayList<Student>();userList.add(user1);userList.add(user3);Teacher groupBean = new Teacher();groupBean.setStudent(user1);groupBean.setStus(userList);groupBean.setMap((HashMap)userMap);//groupBean.setUserList(userList);Gson gsonGroup = new Gson();String sGroupBean = gsonGroup.toJson(groupBean, new TypeToken<Teacher>() {}.getType());System.out.println(sGroupBean);/*{"stus":[{"studentName":"张三","studentId":1001},{"studentName":"李四","studentId":1002}],"student":{"studentName":"张三","studentId":1001},"map":{"user3":{"studentName":"李四","studentId":1002},"user1":{"studentName":"张三","studentId":1001}},"id":0,"age":0}*/<span style="color:#ff0000;">//9、复杂对象string转对象</span>Teacher groupBean2 = (Teacher) gson.fromJson(sGroupBean,new TypeToken<Teacher>() {}.getType());System.out.println(groupBean2); package com.andtools;import com.google.gson.annotations.Expose;public class Student { @Expose private String studentName; @Expose private int studentId; public Student(){} public Student(int studentId,String studentName){this.setStudentId(studentId);this.setStudentName(studentName); } public String toString(){return this.getStudentId() + ":" + this.getStudentName(); } public String getStudentName() {return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public int getStudentId() { return studentId; } public void setStudentId(int studentId) { this.studentId = studentId; }} package com.andtools;import java.util.HashMap;import java.util.List;import java.util.Map;import com.google.gson.annotations.Expose;public class Teacher { @Expose private int id; @Expose private String name; @Expose private int age; @Expose private Student student; @Expose private List stus; @Expose private HashMap map; public String toString(){return this.getId()+":"+this.getName()+":"+this.getAge() +":"+ this.getStudent().toString() + ":" + this.getStus() + ":" + this.getMap(); } 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 int getAge() {return age; } public void setAge(int age) { this.age = age; } public Student getStudent() {return student; } public void setStudent(Student student) {this.student = student; } public List getStus() {return stus; } public void setStus(List stus) {this.stus = stus; } public HashMap getMap() {return map; } public void setMap(HashMap map) {this.map = map; }}

放弃那些不愿放弃的,容忍那些不可容忍的。

通透Gson@Expose注解、@SerializedName、解析json数据

相关文章:

你感兴趣的文章:

标签云: