Gson简介:
Gson是一个Java库,可以用来将Java对象转换成json字符串,或者将json字符串转换成等效的Java对象。
序列化:对象->json字符串{......}
反序列化:字符串->对象
Gson处理对象的几个重要点:
1、推荐把对象都声明为private
2、包含在当前类(包括父类)中的字段都默认被序列化或者反序列化
3、如果某个字段被transient关键词修饰,就不会被序列化或者反序列化。
Gson的使用:
1、创建:通过new Gson()或者通过GsonBuilder来创建Gson实例,通过构造器方法具有各种设置。
2、Gson实例在调用json操作时不维护任何状态。因此,多个序列化和反序列化操作中可以使用同一个gson对象。
3、当序列化的时候,如果对象的某个字段为null,是不会输出到json字符串中的。反序列化的时候,某个字段在json字符串中找不到对应的值,就会被赋值为null。
序列化:
String user=new User();
Gson gson=new Gson();
String jsonString=gson.toString(user);
反序列化:
User user=gson.fromJson(jsonString,User.class);
使用GsonBuilder()
Gson gson=new GsonBuilder()
.serializeNulls() //允许导出null值(设置这个属性之后,没有赋值的属性会以null的形式输出)
.setPrettyPrinting() //格式化输出
.setDateFormat("yyyy-mm-dd") //设置日期输出格式
.create(); //生成配置好的Gson
1、数组
//序列化
Gson gson=new Gson();
int[] ints={1,2,3,4};
String arraysString=gson.toJson(ints);
int[] ints2=gson.fromJson(arraysString,int[].class);
2.集合
List<Student> stus=new ArrayList<>();
Student zs=new Student(1003,"张三");
Student li=new Student(1004,"李四");
li.setGrade(new Grade(99));
zs.setGrade(new Grade(78));
stus.add(li);
stus.add(zs);
String listJson=gson.toJson(stus);
//反序列化
TypeToken<List<Student>> token=new TypeToken<List<Student>>(){};
Type type=token.getType();
List<Student> students=gson.fromJson(listJson,type);
System.out.print(students);
3.复杂数据类型
public class Person {
private List<Student> persons;
}
List<Student> stus=new ArrayList<>();
Student zs=new Student(1003,"张三");
Student li=new Student(1004,"李四");
li.setGrade(new Grade(99));
zs.setGrade(new Grade(78));
stus.add(li);
stus.add(zs);
//person对象的值是一个集合
Person person=new Person();
person.setPersons(stus);
//序列化
String str=gson.toJson(person);
//{"persons":[{"className":1001,"grade":{"score":99}},
//{"className":1001,"grade":{"score":99}}]}
//反序列化
Person person1=gson.fromJson(str,Person.class);
//Person{persons=[Student{classNum=1004, name='null', grade=Grade{score=99}},
//Student{classNum=1003, name='null', grade=Grade{score=78}}]}