JSON 是一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读和编写,调式也更加方便;解析和生成的方式很多,Java中最常用的类库有:JSON-Java、Gson、Jackson、FastJson等
官网
Gson的基本用法
Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化;同时每个方法都提供了重载方法
- 基本数据类型的解析
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类解析与生成
- pojo类
public class Person { private String name; private Integer age; }
- 解析
Gson gson = new Gson(); String json = "{\"name\":\"tom\",\"age\":12}"; Person person = gson.fromJson(json,Person.class); System.out.println(person);
- 生成json
Gson gson = new Gson(); Person person = new Person("tom",12); String json = gson.toJson(person); System.out.println(json);
注
:json的键和值是的名称和类型是和pojo类一一对应的 - pojo类
属性重命名 @SerializedName 注解
- Gson在序列化和反序列化时需要使用反射,使用@SerializedName注解可以更改映射规则
- 为POJO字段提供备选属性名:SerializedName注解提供了两个属性,上面用到了其中一个,别外还有一个属性alternate,接收一个String数组
注
:alternate需要2.4版本@SerializedName(value = "name",alternate = {"my_name","myName"}) private String myName; //当三个属性(name,my_name,myName)都中出现任意一个均可以等到正确结果,当多种情况同时出现,以最后一个出现的值为准。
Gson gson = new Gson(); String json = "{\"my_name\":\"tom1\",\"name\":\"tom2\",\"myName\":\"tom3\",\"age\":18}"; Person person = gson.fromJson(json,Person.class); System.out.println(person);
Gson数组处理
- 遇到数组只需将反射类型换成数组类型即可
Gson gson = new Gson(); String json = "[{\"name\":\"tom\",\"age\":18},{\"name\":\"tom\",\"age\":18},{\"name\":\"tom\",\"age\":18}]"; Person[] people = gson.fromJson(json,Person[].class); for (Person person : people) { System.out.println(person); }
网友评论