添加依赖 Gradle:
dependencies { implementation 'com.google.code.gson:gson:2.8.6' }
Gson的实例化有两种方式:
1.简单实例化
Gson gson=newGson();
2.在实例化时进行多种配置(由GsonBuilder 实现):
Gson gson = new GsonBuilder()
.setLenient()// json宽松
.enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式
.serializeNulls() //智能null
.setPrettyPrinting()// 调教格式
.disableHtmlEscaping() //默认是GSON把HTML 转义的
.create();
Gson的基本用法:
toJson()实现了序列化,fromJson()实现反序列化。
toJson():
1.JavaBean转换Json字符串
public class ResultBean implements Serializable {
private int code;
private String message;
private boolean isOK;
public ResultBean() {
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean isOK() {
return isOK;
}
public void setOK(boolean OK) {
isOK = OK;
}
}
public class Test {
public static void main(String[] args) {
Gson gson = new Gson();
ResultBean result1 = new ResultBean();
result1.setCode(007);
result1.setMessage("詹姆斯邦德");
result1.setOK(true);
String string1 = gson.toJson(result1);
System.out.println(string1);
ResultBean result2 = new ResultBean();
result2.setCode(007);
result2.setMessage(null);
result2.setOK(true);
String string2 = gson.toJson(result2);
System.out.println(string2);
GsonBuilder gsonBuilder = new GsonBuilder().serializeNulls();
ResultBean result3 = new ResultBean();
result3.setCode(007);
result3.setMessage(null);
result3.setOK(true);
String string3 = gsonBuilder.create().toJson(result2);
System.out.println(string3);
}
}
运行结果:
{"code":7,"message":"詹姆斯邦德","isOK":true}
{"code":7,"isOK":true}
{"code":7,"message":null,"isOK":true}
注意:如果ResultBean参数中有变量为null,那么 toJson() 输出的结果则会把为null值的字段忽略,要避免这种结果,可以给Gson设置 serializeNulls();
2.List Map转Json字符串
public class Test {
public static void main(String[] args) {
Gson gson = new Gson();
List<String> list = Arrays.asList("刘大", "王二", "张三", "赵四");
System.out.println(gson.toJson(list));
Map<String, Object> content = new HashMap<>();
content.put("name", "张三");
content.put("age", "26");
System.out.println(gson.toJson(content));
}
}
运行结果:
["刘大","王二","张三","赵四"]
{"name":"张三","age":"26"}
fromJson():
1.Json字符串转JavaBean
public class Test {
public static void main(String[] args) {
String s = "{\n" +
"\t\"code\": \"007\",\n" +
"\t\"message\": \"詹姆斯邦德\",\n" +
"\t\"isOK\": true\n" +
"}";
Gson gson = new Gson();
ResultBean resultBean = gson.fromJson(s, ResultBean.class);
System.out.println(resultBean);
}
}
运行结果:
ResultBean{code=7, message='詹姆斯邦德', isOK=true}
2. Json字符串转List
public class Test {
public static void main(String[] args) {
String s = "[{\n" +
"\t\"code\": \"007\",\n" +
"\t\"message\": \"詹姆斯邦德\",\n" +
"\t\"isOK\": true\n" +
"}, {\n" +
"\t\"code\": \"007\",\n" +
"\t\"message\": \"凌凌漆\",\n" +
"\t\"isOK\": true\n" +
"}]";
Gson gson = new Gson();
List<ResultBean> resultBeanList = gson.fromJson(s, new TypeToken<List<ResultBean>>() {
}.getType());
System.out.println(resultBeanList);
}
}
运行结果:
[ResultBean{code=7, message='詹姆斯邦德', isOK=true}, ResultBean{code=7, message='凌凌漆', isOK=true}]
Gson注解
属性重命名 @SerializedName 注解的使用
作用:转换关键字key,json转换成JavaBean时,json字段的key 默认必须和我们声明类的字段名称一样,当服务器端返回了关键字怎么办,比如key 为new switch这样,我们 在声明类的时候不能写这样的字段,可能你想服务器端改动,他可能要改数据库,但是我告诉你,做服务端的大部分不愿意改动他的json,是很自私的!这时候重命名注解都排上用场了 第二种场景:服务器端返回的json 的key 简直太丑,或者太长,你想简化,my_parent_name,可以简化成mpn 比较优雅简介
在属性名上注解 @SerializedName,使POJO中的属性名转为json的键名
SerializedName注解还有一个属性alternate,接收一个String数组
eg:@SerializedName(value = "data", alternate = {"Date", "date"})
注意:当json中的键名出现data Date date任意一个时均可以得到正确的结果。
参考:
添加依赖 Gradle:
dependencies { implementation 'com.google.code.gson:gson:2.8.6' }
Gson的实例化有两种方式:
1.简单实例化
Gson gson=newGson();
2.在实例化时进行多种配置(由GsonBuilder 实现):
Gson gson = new GsonBuilder()
.setLenient()// json宽松
.enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式
.serializeNulls() //智能null
.setPrettyPrinting()// 调教格式
.disableHtmlEscaping() //默认是GSON把HTML 转义的
.create();
Gson的基本用法:
toJson()实现了序列化,fromJson()实现反序列化。
toJson():
1.JavaBean转换Json字符串
public class ResultBean implements Serializable {
private int code;
private String message;
private boolean isOK;
public ResultBean() {
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean isOK() {
return isOK;
}
public void setOK(boolean OK) {
isOK = OK;
}
}
public class Test {
public static void main(String[] args) {
Gson gson = new Gson();
ResultBean result1 = new ResultBean();
result1.setCode(007);
result1.setMessage("詹姆斯邦德");
result1.setOK(true);
String string1 = gson.toJson(result1);
System.out.println(string1);
ResultBean result2 = new ResultBean();
result2.setCode(007);
result2.setMessage(null);
result2.setOK(true);
String string2 = gson.toJson(result2);
System.out.println(string2);
GsonBuilder gsonBuilder = new GsonBuilder().serializeNulls();
ResultBean result3 = new ResultBean();
result3.setCode(007);
result3.setMessage(null);
result3.setOK(true);
String string3 = gsonBuilder.create().toJson(result2);
System.out.println(string3);
}
}
运行结果:
{"code":7,"message":"詹姆斯邦德","isOK":true}
{"code":7,"isOK":true}
{"code":7,"message":null,"isOK":true}
注意:如果ResultBean参数中有变量为null,那么 toJson() 输出的结果则会把为null值的字段忽略,要避免这种结果,可以给Gson设置 serializeNulls();
2.List Map转Json字符串
public class Test {
public static void main(String[] args) {
Gson gson = new Gson();
List<String> list = Arrays.asList("刘大", "王二", "张三", "赵四");
System.out.println(gson.toJson(list));
Map<String, Object> content = new HashMap<>();
content.put("name", "张三");
content.put("age", "26");
System.out.println(gson.toJson(content));
}
}
运行结果:
["刘大","王二","张三","赵四"]
{"name":"张三","age":"26"}
fromJson():
1.Json字符串转JavaBean
public class Test {
public static void main(String[] args) {
String s = "{\n" +
"\t\"code\": \"007\",\n" +
"\t\"message\": \"詹姆斯邦德\",\n" +
"\t\"isOK\": true\n" +
"}";
Gson gson = new Gson();
ResultBean resultBean = gson.fromJson(s, ResultBean.class);
System.out.println(resultBean);
}
}
运行结果:
ResultBean{code=7, message='詹姆斯邦德', isOK=true}
2. Json字符串转List
public class Test {
public static void main(String[] args) {
String s = "[{\n" +
"\t\"code\": \"007\",\n" +
"\t\"message\": \"詹姆斯邦德\",\n" +
"\t\"isOK\": true\n" +
"}, {\n" +
"\t\"code\": \"007\",\n" +
"\t\"message\": \"凌凌漆\",\n" +
"\t\"isOK\": true\n" +
"}]";
Gson gson = new Gson();
List<ResultBean> resultBeanList = gson.fromJson(s, new TypeToken<List<ResultBean>>() {
}.getType());
System.out.println(resultBeanList);
}
}
运行结果:
[ResultBean{code=7, message='詹姆斯邦德', isOK=true}, ResultBean{code=7, message='凌凌漆', isOK=true}]
Gson注解
属性重命名 @SerializedName 注解的使用
作用:转换关键字key,json转换成JavaBean时,json字段的key 默认必须和我们声明类的字段名称一样,当服务器端返回了关键字怎么办,比如key 为new switch这样,我们 在声明类的时候不能写这样的字段,可能你想服务器端改动,他可能要改数据库,但是我告诉你,做服务端的大部分不愿意改动他的json,是很自私的!这时候重命名注解都排上用场了 第二种场景:服务器端返回的json 的key 简直太丑,或者太长,你想简化,my_parent_name,可以简化成mpn 比较优雅简介
在属性名上注解 @SerializedName,使POJO中的属性名转为json的键名
SerializedName注解还有一个属性alternate,接收一个String数组
eg:@SerializedName(value = "data", alternate = {"Date", "date"})
注意:当json中的键名出现data Date date任意一个时均可以得到正确的结果。