Gson介绍:
GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。
特点: a、快速、高效
b、代码量少、简洁
c、面向对象
d、数据传递和解析方便
Gson的pom:
<!--gson-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
1.gson生成json数据
public void Gsons(){
DiaoSi diaoSi = new DiaoSi(); //实体
diaoSi.setName("生日");
diaoSi.setSex("nana");
diaoSi.setAge(20);
HashMap<String, Object> map = new HashMap<>();
map.put("name","hahahha" );
map.put("age",2313 );
map.put("sex",123123 );
Gson gson = new Gson();
System.out.println(gson.toJson(map)); //通过gson.toJson()方法转为json串
System.out.println(gson.toJson(diaoSi));
2.美化json
@Test
public void Gsons(){
DiaoSi diaoSi = new DiaoSi(); //实体
diaoSi.setName("生日");
diaoSi.setSex("nana");
diaoSi.setAge(20);
//美化json
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
Gson gson = gsonBuilder.create();
System.out.println(gson.toJson(diaoSi));
3.如果key不一致的时候,可以用回调/注解
public void Gsons(){
DiaoSi diaoSi = new DiaoSi(); //实体
diaoSi.setName("生日");
diaoSi.setSex("nana");
diaoSi.setAge(20);
//进行回调
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {//回调函数
@Override
public String translateName(Field f) {
if(f.getName().equals("name")){ //获取name值
return "hahaha";
}
return f.getName();
}
});
Gson gson = gsonBuilder.create();
System.out.println(gson.toJson(diaoSi));
也可以在实体的属性 @SerializedName("hahaha") 效果是一样的,用回调就不能用注解了。
4.解析json
@AllArgsConstructor //全参构造函数
@NoArgsConstructor //空参构造函数
@Data //set get
@Accessors(chain=true) //链式访问
public class ZhangSan {
private String name;
private Double age;
private String birthday;
private String[] majar;
private boolean house;
}
@Test
public void Gsonsbean(){
//读取json文件路径
File file = new File(jsonTest.class.getResource("/zhangsan.json").getFile());
try {
//读取json内容
String s = FileUtils.readFileToString(file);
Gson gson = new Gson();
//把gson对象进行反解析,映射关系是实体的key
ZhangSan zhangSan = gson.fromJson(s, ZhangSan.class);
System.out.println(zhangSan);
} catch (IOException e) {
e.printStackTrace();
}
}
如果是日期类型呢?怎么半。
//把实体birthday实行换成Date类型
@Test
public void Gsonsbean(){
//读取json文件路径
File file = new File(jsonTest.class.getResource("/zhangsan.json").getFile());
try {
//读取json内容
String s = FileUtils.readFileToString(file);
//定义日期格式
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
//把gson对象进行反解析,映射关系是实体的key
ZhangSan zhangSan = gson.fromJson(s, ZhangSan.class);
System.out.println(gson.toJson(zhangSan));
} catch (IOException e) {
e.printStackTrace();
}
}
5.集合类解析
Gson能把json的数据格式,完美无瑕的对接到list里
@AllArgsConstructor //全参构造函数
@NoArgsConstructor //空参构造函数
@Data //set get
@Accessors(chain=true) //链式访问
public class ZhangSan {
private String name;
private Double age;
private String birthday;
private List<String> majar; //原来是 private String[] majar;
private boolean house;
}
正常打印就可以,都是很基本的功能。