一、Gson的基本用法
1.1、Gson对象
在进行序列化与反序列操作前,需要先实例化一个 com .google.gson.Gson 对象,获取 Gson 对象的方法有两种//通过构造函数来获取
Gson gson = new Gson(); //通过 GsonBuilder 来获取,可以进行多项特殊配置
Gson gson = new GsonBuilder().create();
1.2、生成 Json
利用 Gson 可以很方便地生成 Json 字符串,通过使用 addProperty 的四个重载方法public static void main(String[] args) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("String", "leavesC");
jsonObject.addProperty("Number_Integer", 23);
jsonObject.addProperty("Number_Double", 22.9);
jsonObject.addProperty("Boolean", true);
jsonObject.addProperty("Char", 'c');
System.out.println();
System.out.println(jsonObject);
}
addProperty 方法底层调用的是 add(String property, JsonElement value) 方法,即将基本数据类型转化为了 JsonElement 对象,JsonElement 是一个抽象类,而 JsonObject 继承了 JsonElement ,因此我们可以通过 JsonObject 自己来构建一个 JsonElementpublic static void main(String[] args) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("String", "leavesC");
jsonObject.addProperty("Number", 23);
jsonObject.addProperty("Number", 22.9);
jsonObject.addProperty("Boolean", true);
jsonObject.addProperty("Char", 'c');
JsonObject jsonElement = new JsonObject();
jsonElement.addProperty("Boolean", false);
jsonElement.addProperty("Double", 25.9);
jsonElement.addProperty("Char", 'c');
jsonObject.add("JsonElement", jsonElement);
System.out.println();
System.out.println(jsonObject);
}
1.3、Json与数组、List的转化
Json数组 与 字符串数组public static void main(String[] args) { //Json数组 转为 字符串数组
Gson gson = new Gson();
String jsonArray = "[\"https://github.com/leavesC\",\"https://www.jianshu.com/u/9df45b87cfdf\",\"Java\",\"Kotlin\",\"Git\",\"GitHub\"]";
String[] strings = gson.fromJson(jsonArray, String[].class);
System.out.println("Json数组 转为 字符串数组: "); for (String string : strings) {
System.out.println(string);
} //字符串数组 转为 Json数组
jsonArray = gson.toJson(jsonArray, new TypeToken() {
}.getType());
System.out.println("\n字符串数组 转为 Json数组: ");
System.out.println(jsonArray);
}
Json数组 与 Listpublic static void main(String[] args) { //Json数组 转为 List
Gson gson = new Gson();
String jsonArray = "[\"https://github.com/leavesC\",\"https://www.jianshu.com/u/9df45b87cfdf\",\"Java\",\"Kotlin\",\"Git\",\"GitHub\"]";
List stringList = gson.fromJson(jsonArray, new TypeToken>() {
}.getType());
System.out.println("\nJson数组 转为 List: "); for (String string : stringList) {
System.out.println(string);
} //List 转为 Json数组
jsonArray = gson.toJson(stringList, new TypeToken>() {
}.getType());
System.out.println("\nList 转为 Json数组: ");
System.out.println(jsonArray);
}
1.4、序列化与反序列化
Gson 也提供了 toJson() 和 fromJson() 两个方法用于转化 Model 与 Json,前者实现了序列化,后者实现了反序列化
首先,声明一个 User 类/**
* 作者:chenZY
* 时间:2018/3/17 18:32
* 描述:https://github.com/leavesC
*/public class User { private String name; private int age; private boolean sex; public User(String name, int age, boolean sex) { this.name = name; this.age = age; this.sex = sex;
} @Override
public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", sex=" + sex + '}';
}
}
序列化的方法很简单,调用 gson 对象的 toJson 方法,传入要序列化的对象public static void main(String[] args) { //序列化
User user = new User("leavesC", 24, true);
Gson gson = new Gson();
System.out.println();
System.out.println(gson.toJson(user));
}
反序化的方式也类似public static void main(String[] args) { //反序列化
String userJson = "{\"name\":\"leavesC\",\"age\":24,\"sex\":true}";
Gson gson = new Gson();
User user = gson.fromJson(userJson, User.class);
System.out.println();
System.out.println(user);
}
二、属性重命名
继续使用上一节声明的 User 类,根据 User 类声明的各个属性名,移动端的开发者希望接口返回的数据格式即是如下这样的{"name":"leavesC",