Life is short, you need Gson
一、JSON简介
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 键值对是用来保存JS对象的一种方式,和JS对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值,如下例子所示:
{“firstName”: “John”}
二、谷歌Gson
解析和生成json的方式很多,java的有Jackson、Gson、FastJson等,Gson是谷歌提供的一款开源解析和生成json的库。
Gson gson = new Gson();
Gson gson = new GsonBuilder().create();
第二种初始化方法,可以选择更多的序列化与反序列化方式,下面会详细介绍。
gson主要提供了fromJson和toJson两个方法,fromJson用于反序列化,toJson用于把json序列化为Json字符串。
public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException {
}
public String toJson(Object src) {
}
fromJson()第二个入参是反序列化成的对象类型
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public static void main(String[] args) {
Person person = new Person("steven", 18);
Gson gson = new Gson();
String json = gson.toJson(person);
System.out.println(json);
String personJson = "{\"name\":\"steven\",\"age\":18}";
Person person1 = gson.fromJson(personJson, Person.class);
System.out.println(person1);
}
输出--》
{ "name":"steven","age":18}
Person{ name='steven', age=18}
可以看出Gson的强悍之处,普通的类库序列化和反序列时必须要求所对应的类中属性必须含有setter和getter方法,Gson完全不需要。
public static void main(String[] args) {
Person person = new Person("steven", 18);
Map<String, Person> personMap = new HashMap<>();
personMap.put("person", person);
Gson gson = new Gson();
String json = gson.toJson(personMap);
System.out.println(json);
String personJson = "{\"person\":{\"name\":\"steven\",\"age\":18} }";
Map map = gson.fromJson(personJson, Map.class);
System.out.println(map);
}
输出--》
{ "person":{ "name":"steven","age":18} }
{ person={ name=steven, age=18.0} }
此处可以看出通过gson可以近乎完美的转换map和json,可以看出有个有小问题fromJson时,数字类型的value转换时会转成double类型,会把18转成18.0,下文会有解决方案。
三、Gson注解
1、序列化名注解@SerializedName
@SerializedName("personName")
private String name;
public static void main(String[] args) {
Person person = new Person("steven", 18);
Gson gson = new Gson();
String json =