1 添加maven依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
2 在要使用的类中,添加一个属性,springboot会自动注入一个Gson对象
2.1 使用spring注入一个Gson对象
@Autowired
private Gson gson;
下面是springboot框架中,关于gson的配置源码
@Bean
@ConditionalOnMissingBean
public Gson gson(GsonBuilder gsonBuilder) {
return gsonBuilder.create();
}
2.2 也可以自己new一个Gson对象
@Test
public void testGson6() {
Gson gson = new Gson();
User user = new User();
user.setUsername("liangqichao");
user.setRealname("梁启超");
String json = gson.toJson(user);
System.out.println(json);
}
运行结果:{“username”:“liangqichao”,“realname”:“梁启超”}
3 java对象或集合转为json格式字符串(序列化)
3.1 将用户自定义类型转为json格式的字符串
@Test
public void testGson1() {
Project project = new Project();
project.setProjectName("测试项目");
project.setUsers("[123,545]");
String json = gson.toJson(project);
System.out.println(json);
}
运行结果:{“projectName”:“测试项目”,“users”:“[123,545]”}
3.2 将基本类型的集合转为json格式的字符串
@Test
public void testGson2() {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
String json = gson.toJson(list);
System.out.println(json);
}
运行结果:[1,2,3]
3.3 将String类型的集合转为json格式的字符串
@Test
public void testGson3() {
List<String> list = new ArrayList<>();
list.add("蜜雪冰城");
list.add("沪上阿姨");
list.add("喜茶");
String json = gson.toJson(list);
System.out.println(json);
}
运行结果:[“蜜雪冰城”,“沪上阿姨”,“喜茶”]
3.4 将String类型的集合转为json格式的字符串
@Test
public void testGson11() {
List<User> list = new ArrayList<>();
//创建2个user
User user1 = new User();
user1.setRealname("梁启超");
User user2 = new User();
user2.setRealname("李清照");
//添加到集合中
list.add(user1);
list.add(user2);
//进行序列化
String json = gson.toJson(list);
System.out.println(json);
}
运行结果:[{“realname”:“梁启超”},{“realname”:“李清照”}]
3.5 将自定义类型的map转为json格式的字符串
@Test
public void testGson4() {
Map<String, User> map = new HashMap<>();
User user1 = new User();
user1.setRealname("梁启超");
map.put("liang",user1);
User user2 = new User();
user2.setRealname("李清照");
map.put("li",user2);
String json = gson.toJson(map);
System.out.println(json);
}
运行结果:{“li”:{“realname”:“李清照”},“liang”:{“realname”:“梁启超”}}
3.6 将String类型的map转为json格式的字符串
@Test
public void testGson5() {
Map<String, String> map = new HashMap<>();
map.put("liang","梁启超");
map.put("li","李清照");
String json = gson.toJson(map);
System.out.println(json);
}
运行结果:{“li”:“李清照”,“liang”:“梁启超”}
3.7 将复杂对象转为json格式的字符串
@Test
public void testGson15() {
UserVo userVo = new UserVo();
userVo.setUserId(1L);
userVo.setRealname("梁启超");
userVo.setUsername("liangqichao");
//准备第一个Project对象
ProjectVo projectVo = new ProjectVo();
projectVo.setProjectId(1L);
projectVo.setProjectName("A项目");
//准备第二个Project对象
ProjectVo projectVo2 = new ProjectVo();
projectVo2.setProjectId(2L);
projectVo2.setProjectName("B项目");
//准备一个集合
List<ProjectVo> projectVoList = new ArrayList<>();
projectVoList.add(projectVo);
projectVoList.add(projectVo2);
//将集合设置到user
userVo.setProjectVoList(projectVoList);
//序列化
String json = gson.toJson(userVo);
System.out.println(json);
}
运行结果:
{“userId”:1,“username”:“liangqichao”,“realname”:“梁启超”,“projectVoList”:[{“projectId”:1,“projectName”:“A项目”},{“projectId”:2,“projectName”:“B项目”}]}
4 将json格式字符串转为java对象或者集合(反序列化)
4.1 将json格式字符串转为用户自定义类型的对象
@Test
public void testGson7() {
//{"username":"liangqichao","realname":"梁启超"}
String json = "{\"username\":\"liangqichao\",\"realname\":\"梁启超\"}";
User user = gson.fromJson(json, User.class);
System.out.println(user);
}
//或者
@Test
public void testGson8() {
//{"username":"liangqichao","realname":"梁启超"}
String json = "{\"username\":\"liangqichao\",\"realname\":\"梁启超\"}";
Type type = new TypeToken<User>() {
}.getType();
User user = gson.fromJson(json, type);
System.out.println(user);
}
运行结果:User{userId=null, username=liangqichao, password=null, realname=梁启超, projects=null}
4.2 将json格式字符串转为基本类型的集合
@Test
public void testGson9() {
//[1,2,3]
String json = "[1,2,3]";
Type type = new TypeToken<List<Integer>>() {
}.getType();
List<Integer> list = gson.fromJson(json, type);
list.forEach(num->{
System.out.println("数字为:"+ num);
});
}
运行结果:
数字为:1
数字为:2
数字为:3
4.3 将json格式字符串转为String类型的集合
@Test
public void testGson10() {
//["蜜雪冰城","沪上阿姨","喜茶"]
String json = "[\"蜜雪冰城\",\"沪上阿姨\",\"喜茶\"]";
Type type = new TypeToken<List<String>>() {
}.getType();
List<String> list = gson.fromJson(json, type);
list.forEach(str->{
System.out.println("字符串为:"+ str);
});
}
运行结果:
字符串为:蜜雪冰城
字符串为:沪上阿姨
字符串为:喜茶
4.4 将json格式字符串转为用户自定义类型的对象集合
@Test
public void testGson12() {
//[{"realname":"梁启超"},{"realname":"李清照"}]
String json = "[{\"realname\":\"梁启超\"},{\"realname\":\"李清照\"}]";
Type type = new TypeToken<List<User>>() {
}.getType();
List<User> list = gson.fromJson(json, type);
list.forEach(user->{
System.out.println("user为:"+ user);
});
}
运行结果:
user为:User{userId=null, username=null, password=null, realname=梁启超, projects=null}
user为:User{userId=null, username=null, password=null, realname=李清照, projects=null}
4.5 将json格式字符串转为基本类型的map
4.6 将json格式字符串转为String类型的map
@Test
public void testGson13() {
//{"li":"李清照","liang":"梁启超"}
String json = "{\"li\":\"李清照\",\"liang\":\"梁启超\"}";
Type type = new TypeToken<Map<String, String>>() {
}.getType();
Map<String, String> map = gson.fromJson(json, type);
Set<String> keys = map.keySet();
for (String key : keys) {
System.out.println("key=" + key + ";value=" + map.get(key));
}
}
运行结果:
key=li;value=李清照
key=liang;value=梁启超
4.7 将json格式字符串转为用户自定义类型的对象map
@Test
public void testGson14() {
//{"li":{"realname":"李清照"},"liang":{"realname":"梁启超"}}
String json = "{\"li\":{\"realname\":\"李清照\"},\"liang\":{\"realname\":\"梁启超\"}}";
Type type = new TypeToken<Map<String, User>>() {
}.getType();
Map<String, User> map = gson.fromJson(json, type);
Set<String> keys = map.keySet();
for (String key : keys) {
System.out.println("key=" + key + ";value=" + map.get(key));
}
}
运行结果:
key=li;value=User{userId=null, username=null, password=null, realname=李清照, projects=null}
key=liang;value=User{userId=null, username=null, password=null, realname=梁启超, projects=null}
4.8 将json格式字符串转为复杂对象
@Test
public void testGson16() {
//{"userId":1,"username":"liangqichao","realname":"梁启超","projectVoList":[{"projectId":1,"projectName":"A项目"},{"projectId":2,"projectName":"B项目"}]}
String json = "{\"userId\":1,\"username\":\"liangqichao\",\"realname\":\"梁启超\",\"projectVoList\":[{\"projectId\":1,\"projectName\":\"A项目\"},{\"projectId\":2,\"projectName\":\"B项目\"}]}";
Type type = new TypeToken<UserVo>() {
}.getType();
UserVo userVo = gson.fromJson(json, type);
System.out.println(userVo);
}
运行结果:
UserVo{userId=1, username=‘liangqichao’, realname=‘梁启超’, projectVoList=[ProjectVo{projectId=1, projectName=‘A项目’, userVoList=null, positionList=null}, ProjectVo{projectId=2, projectName=‘B项目’, userVoList=null, positionList=null}]}
5 为什么要使用gson,而不用fastjson
1 不管是web项目,还是android项目,gson都支持,使用gradle在安卓开发环境中安装fastjson,一直报错,很难解决
2 fastjson曝出很多安全漏洞,虽然fastjson序列化和反序列化效率很高,但是gson也没差很多,我也不太看中这点效率
3 fastjson在进行数组转换的时候,比较麻烦,而gson对于程序员就比较友好了。