1. Gson 介绍:

Gson 是一个用于将 java 对象转换为 json 格式的 java 工具库. 它也可以将 json 格式的字符串转换为等价的 java 对象. Gson 适用于任何 java 对象, 包括那些已经存在的, 没有源代码的 java 对象.

一些其他开源项目也提供 java 对象到 json 格式的转换功能. 大部分都需要你在自己的 java 类中添加相关注释声明, 然而某些时候, 你并不能直接修改那些 java 类的源代码. 而且, 他们大部分并不能完全支持 java 泛型. Gson 在设计之初, 就将其视为重点解决对象之一.

  1. Gson 功能特点:
  •      提供简单高效的 toJson() 和 fromJson() 方法来快速实现 java 对象和 json 格式之间的相互转换;

  •      允许已经存在的 java 类, 不加修改地转换为 json 格式, 反之亦然;

  •      完全支持 java 泛型;

  •      允许自定义 java 对象转换为 json 格式的输出形式;

  •      完美支持任意混合对象类型(包括深层继承和泛型);

  1. Gson 使用文档:
  1. Gson 使用方法:

4.1. 原始类型转换:

数字:

Gson gson = new Gson();

gson.toJson(1); // 输出: 1

int one = gson.fromJson(1, int.class); // one = 1

字符串:

Gson gson = new Gson();

gson.toJson("hello, world"); // 输出: "hello, world"

String str = json.fromJson("\"hello, world\"", String.class); // str = "hello, world"

数组:

int[] values = {101, 102};

Gson gson = new Gson();

gson.toJson(values); // 输出: [101, 102]

int[] intArray = gson.fromJson("[101, 102]", int[].class); // intArray = {101, 102}. 单纯数据类型可以这样.

int[] intArray2 = gson.fromJson("[101, 102]", new TypeToken<int[]>(){}.getType()); // intArray2 = {101, 102}. 也可以这样做, 不过针对复杂数据类型可以这样.

4.2. 对象类型:

class Person {

private String name; // 姓名

private int age; // 年龄

private double salary; // 薪水

Person(){}

public void setName(String name) {
this.name = name;
}

public String getName() {
return this.name;
}

public void setAge(int age) {
this.age = age;
}

public String getAge() {
return this.age;
}

public void setSalary(double salary) {
this.salary = salary;
}

public String getSalary() {
return this.salary;
}
}

Person person = new Person();

person.setName("zhangsan");

person.setAge(24);

person.setSalary(2134.5);

Gson gson = new Gson();

gson.toJson(person); // 输出: {"name" : "zhangsan", "age" : 24, "salary" : 2134.5}

Person person2 = gson.fromJson(person, Person.class);

Person person3 = gson.fromJson(person, new TypeToken<Person>(){}.getType());

对象类型需要特别说明的几点:

  •      完美支持私有字段(推荐使用);

  •      不需要特别声明, Gson 默认会将对象及其父类的字段实现 json 序列化和反序列化操作;

  •      如果某个字段特别声明为易变的, 那么, 默认将不对其进行 json 序列化和反序列化;

  •      通过如下方式实现正确处理 null 的序列化和反序列化操作:

    1. 序列化时, null 字段将不予输出;

    2. 反序列化时, json 对象中缺失的字段, 其值将设置为 null;

  •      If a field is synthetic, it is ignored and not included in JSON serialization or deserialization;

  •      Fields corresponding to the outer classes in  inner classes, anonymous classes, and local classes are ignored and not included in serialization or deserialization;

  1. 参考资料:
  1. 声明: