在springboot项目中使用gson

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对于程序员就比较友好了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值