Json数据交换一Gson
欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
添加依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
Gson的基本用法
基本数据类型的解析(String解析成其他类型)
Gson gson = new Gson();
int i = gson.fromJson("100", int.class); //100
double d = gson.fromJson("\"99.99\"", double.class); //99.99
boolean b = gson.fromJson("true", boolean.class); // true
String str = gson.fromJson("String", String.class); // String
基本数据类型的生成
Gson gson = new Gson();
String jsonNumber = gson.toJson(100); // 100
String jsonBoolean = gson.toJson(false); // false
String jsonString = gson.toJson("String"); //"String"
POJO类生成JSON
Gson gson = new Gson();
User user = new User("毛驴哥",24);
String jsonObject = gson.toJson(user); // {"name":"毛驴哥","age":24}
POJO类解析JSON
Gson gson = new Gson();
String jsonString = "{\"name\":\"毛驴哥\",\"age\":24}";
User user = gson.fromJson(jsonString, User.class);
属性重命名 @SerializedName 注解的使用
json的email_address就可以对应属性名emailAddress
@SerializedName("email_address")
public String emailAddress;
SerializedName注解提供了两个属性,上面用到了其中一个,别外还有一个属性alternate,接收一个String数组。
@SerializedName(value = "emailAddress", alternate = {"email", "email_address"})
public String emailAddress;
三个属性(email_address、email、emailAddress)中出现任意一个时均可以得到正确的结果。
Gson中使用泛型
对于Java来说List
为了解决的上面的问题,Gson为我们提供了TypeToken来实现对泛型的支持
Gson gson = new Gson();
String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
String[] strings = gson.fromJson(jsonArray, String[].class); //直接改为 List<String>.class 是行不通
List<String> stringList = gson.fromJson(jsonArray, new TypeToken<List<String>>() {}.getType());
注:TypeToken的构造方法是protected修饰的,所以上面才会写成new TypeToken<List