黑马程序员技术交流社区

标题: 【济南校区】JSON转换工具fastjson和jackson的总结 [打印本页]

作者: 大山哥哥    时间: 2018-7-4 23:25
标题: 【济南校区】JSON转换工具fastjson和jackson的总结
本帖最后由 大山哥哥 于 2018-7-4 23:40 编辑

在本帖子中,我们来一起总结一下fastjson和jackson的常用API。
首先准备一个实体类User:
[Java] 纯文本查看 复制代码
public class User {
        private Integer id;
        private String name;
        private Date birthday;
        
        public Integer getId() {
                return id;
        }
        public void setId(Integer id) {
                this.id = id;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
//        @JSONField(format="yyyy-mm-dd")
        public Date getBirthday() {
                return birthday;
        }
        public void setBirthday(Date birthday) {
                this.birthday = birthday;
        }
        @Override
        public String toString() {
                SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd");
                return "User [id=" + id + ", name=" + name + ", birthday=" + dataFormat.format(birthday) + "]";
        }
}


接下来,开始我们的测试,下面的测试代码中已经将测试要求和结果进行了打印
[Java] 纯文本查看 复制代码
public class JsonTest {
       
        //准备存放了一个对象的json字符串
        private String userStr = "{\"id\":1,\"name\":\"简溪\",\"birthday\":\"2010-01-01\"}";
        //准备存放了一个集合的json字符串
        private String userArr = "[{\"id\":1,\"name\":\"简溪\",\"birthday\":\"2010-01-01\"},"
                        + "{\"id\":2,\"name\":\"顾里\",\"birthday\":\"2012-08-01\"}]";
       
        private User user;
       
        private List<User> users = new ArrayList<User>();
       
        @Before
        public void initUser() {
                //初始化一个用户
                User user = new User();
                user.setId(1);
                user.setName("林萧");
                user.setBirthday(new Date());
                this.user = user;
               
                //初始化一个集合
                User user1 = new User();
                user1.setId(1);
                user1.setName("林萧");
                user1.setBirthday(new Date());
                users.add(user1);
               
                User user2 = new User();
                user2.setId(2);
                user2.setName("顾源");
                user2.setBirthday(new Date());
                users.add(user2);
        }

        //fastjson
        @Test
        public void fastjson_json2Bean() {
                //[1-1] 对象格式json串转对象
                User user = JSONObject.parseObject(userStr, User.class);
                System.out.println(user);
                //打印效果如下:
                //User [id=1, name=简溪, birthday=2010-01-01]
               
                //[1-2] 集合格式json串转对象
                List<User> users = JSONArray.parseArray(userArr, User.class);
                System.out.println(users);
                //打印效果如下:
//                [User [id=1, name=简溪, birthday=2010-01-01], User [id=2, name=顾里, birthday=2012-08-01]]
        }
       
        @Test
        public void fastjson_bean2Json() {
                //[1-3] 对象转json串
                String userJson = JSONObject.toJSONString(user);
                System.out.println(userJson);
                //打印效果如下:
//                {"birthday":1530716739741,"id":1,"name":"林萧"}
               
                //[1-4] 集合转json串
                String usersStr = JSONArray.toJSONString(users);
                System.out.println(usersStr);
                //打印效果如下:
//                [{"birthday":1530716739741,"id":1,"name":"林萧"},{"birthday":1530716739741,"id":2,"name":"顾源"}]
        }
       
        //jackson
        @Test
        public void jackson_json2Bean() throws Exception {
                //[2-1] 对象格式json串转对象
                ObjectMapper jackson = new ObjectMapper();
                User user = jackson.readValue(userStr, User.class);
                System.out.println(user);
                //打印结果
//                User [id=1, name=简溪, birthday=2010-01-01]
               
                //[2-2 对象格式json串转对象
                List<User> users = jackson.readValue(userArr, new TypeReference<List<User>>() {});
                System.out.println(users);
                //打印结果
//                [User [id=1, name=简溪, birthday=2010-01-01], User [id=2, name=顾里, birthday=2012-08-01]]
        }
       
        @Test
        public void jackson_bean2Json() throws Exception {
               
                ObjectMapper jackson = new ObjectMapper();
                //[2-3] 对象转json串
                String userJson = jackson.writeValueAsString(user);
                System.out.println(userJson);
                //打印结果
//                {"id":1,"name":"林萧","birthday":1530717373507}
               
                //[2-4] 集合转json串
                String usersJson = jackson.writeValueAsString(users);
                System.out.println(usersJson);
                //打印结果
//                [{"id":1,"name":"林萧","birthday":1530717401460},{"id":2,"name":"顾源","birthday":1530717401460}]
               
        }
}

本次总结中,比较难的是jackson中将json字符串转成对象集合的过程。
PS:详细代码参见附件——本项目基于maven。
JAR包如下:


jars.jpg (50 KB, 下载次数: 44)

jars.jpg

jsonParse.zip

14.24 KB, 下载次数: 112


作者: 1912217082    时间: 2019-6-30 23:41
我是华哥的小迷妹




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2