zoukankan      html  css  js  c++  java
  • JSON(三)——java中对于JSON格式数据的解析之json-lib与jackson

      java中对于JSON格式数据的操作,主要是json格式字符串与JavaBean之间的相互转换。java中能够解析JSON格式数据的框架有很多,比如json-lib,jackson,阿里巴巴的fastjson,谷歌的gson,本文只要对使用时间最长的json-lib和目前应用最为广泛的jackson这两种框架的使用进行说明。

      首先准备两个用于json格式字符串向JavaBean之间的相互转换的类。

    public class User {
        private int age;
        private String name;
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public String toString() {
            return "User [age=" + age + ", name=" + name + "]";
        }
        
    }
    public class ListUser {
    
        private List<User> listUser;
    
        public List<User> getListUser() {
            return listUser;
        }
    
        public void setListUser(List<User> listUser) {
            this.listUser = listUser;
        }
        
        
    }

    我们先来看json-lib的实现

    public static void main(String[] args) throws Exception{
            String jsonStr1 = "{"name":"张三","age":23}";
            String jsonStr2 = "[{"name":"张三","age":1},{"name":"李四","age":24}]";
            String jsonStr3 = "{"listUser": [{"name":"张三","age":1},{"name":"李四","age":24}] }";
    
         //json-lib中json对象的构造器
         JSONObject jsonObject = JSONObject.fromObject(jsonStr1);
         //转换javaBean
         User user = (User)JSONObject.toBean(jsonObject, User.class);
        
    //json-lib中json数组的构造器      JSONArray jsonArray = JSONArray.fromObject(jsonStr2);      //json数组转换为list集合      List<User> list = (List<User>)jsonArray.toCollection(jsonArray, User.class);      //对于"jsonStr3"这种数据格式的转换json的实现较为麻烦。      //首先创建一个ListUser对象。      ListUser lu = new ListUser();      //json构造器      JSONObject jsonObject1 = JSONObject.fromObject(jsonStr3);      //获取json数组      JSONArray jsonArray1 = (JSONArray)jsonObject1.get("listUser");      //json数组转换为list集合      List<User> list2 = (List<User>)jsonArray.toCollection(jsonArray1, User.class);      lu.setListUser(list2);      }

     再来看一下jackson对这两种数据格式的转换。主要用到jackson的ObjectMapper这个类。

    public static void main(String[] args) throws Exception{
            String jsonStr1 = "{"name":"张三","age":23}";
            String jsonStr2 = "[{"name":"张三","age":1},{"name":"李四","age":24}]";
            String jsonStr3 = "{"listUser": [{"name":"张三","age":1},{"name":"李四","age":24}] }";
         
         ObjectMapper mapper = new ObjectMapper();
        
         User user = mapper.readValue(jsonStr1, User.class);
        
         List<User> userList = new ArrayList<User>();
        userList =(List<User>)mapper.readValue(jsonStr2, list.getClass());

         ListUser readValue = mapper.readValue(jsonStr3, ListUser.class);
        

    }

    从以上两种框架的比较来看,相对于json-lib的转换来说jackson比较简单,而且从性能上来说jackson的转换速度也比较快。另外springmvc框架也包含了jackson框架,使我们在web工程中对于json的使用更加的方便。所以对于json数据格式的解析推荐是哪个jackson框架来做。

      最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。

  • 相关阅读:
    团队沟通利器之UML——活动图
    Ninject对Web Api的支持问题
    关于分布式系统的数据一致性问题
    ASP.NET Web开发框架 查询
    用泛型的IEqualityComparer<T> 去除去重复项
    数据库连接监控组件,避免日常开发中因为数据库连接长时间占用或业务完成后忘记关闭连接所带来的数据库问题
    认识项目经理
    状态模式(State Pattern)
    Django框架学习通用视图
    MS CRM 2011 Schedule Service Activities
  • 原文地址:https://www.cnblogs.com/cdf-opensource-007/p/6395458.html
Copyright © 2011-2022 走看看