zoukankan      html  css  js  c++  java
  • FastJSON、Gson、Jackson(简单了解使用)

     

    下载地址(maven)

      Jackson:http://mvnrepository.com/search?q=jackson

      FastJson:http://mvnrepository.com/search?q=FastJson

      Gson:http://mvnrepository.com/search?q=Gson

    下载教程(已gson为例):

    简单了解

    一、Jackson

     1、简介:

     Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。

    2、解析原理:

      基于事件驱动,与GSON相同,先创建一个对应于JSON数据的JavaBean类就可以通过简单的操作解析出所需JSON数据。但和Gson解析不同的是,GSON可按需解析,即创建的JavaBean类不一定完全涵盖所要解析的JSON数据,按需创建属性,但Jackson解析对应的JavaBean必须把Json数据里面的所有key都有所对应,即必须把JSON内的数据所有解析出来,无法按需解析。但Jackson的解析速度和效率都要比GSON高   

    3、优势

    1、解析效率最高 

    2、在数据量大的情况优势尤为明显、占存少

    4、缺点

    必须完全解析文档,如果要按需解析的话可以拆分Json来读取,操作和解析方法复杂;

    5、推荐使用情景

    适用于需要处理超大型JSON文档、不需要对JSON文档进行按需解析、、性能要求较高的场合

    6、代码:

     public static void main(String[] args) {
            System.out.println(toJson(new user(1,"张三","男",new Date())));
        }
        public static String toJson(Object obj){
            String re=null;
            //对象映射
            ObjectMapper objectMapper=new ObjectMapper();
            //设置时间格式
            SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            objectMapper.setDateFormat(dateFormat);
            try {
                re=objectMapper.writeValueAsString(obj);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return re;
        }

      user代码

    package com;
    
    import java.util.Date;
    
    public class user {
        int id;
        String name;
        String sex;
        Date birthday;
    
        public user(int id, String name, String sex, Date birthday) {
            this.id = id;
            this.name = name;
            this.sex = sex;
            this.birthday = birthday;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        public user() {
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public user(int id, String name, String sex) {
            this.id = id;
            this.name = name;
            this.sex = sex;
        }
    }
    View Code

    运行结果

    二、Gson

    1、简介:

     Google提供的用来java对象和JSON数据之间进行映射的JAVA类库,可以将一个JSON字符转成一个java对象,反过来也OK。

    2、解析原理:

     

    3、优势

    1、快速,高效 
    2、代码量少 
    3、面向对象 
    4、数据传输解析方便 

    4、注意事项

    1、内部嵌套的类必须是static的,要不然解析会出错; 
    2、类里面的属性名必须跟Json字段里面的Key是一模一样的; 
    3、内部嵌套的用[]括起来的部分是一个List,所以定义为 public List< B> b,而只用{}嵌套的就定义为 public C c,是不是很简单,而且现在android studio上可以直接用插件生成实体类,那更加方便了

    5、代码

    public static void main(String[] args) {
            System.out.println(toJson(new user(1, "张三", "男", new Date())));
        }
        public static String toJson(Object obj){
            String re=null;
                Gson gson=new Gson();
            re= gson.toJson(obj);
            return  re;
        }
    //反序列化 gson.formJson()
    // List<String> ls = gson.fromJson(aaa,new TypeToken<List<String>>(){}.getType());

     user代码在上面

    三、FastJson 

    1、简介:

    FastJson是阿里巴巴公司提供的一个用Java语言编写的高性能功能完善的JSON库,该库涉及的最基本功能就是序列化和反序列化。Fastjson支持java bean的直接序列化,同时也支持集合、Map、日期、Enum和泛型等的序列化。你可以使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化,常用的序列化操作都可以在JSON类上的静态方法直接完成。Fastjson采用独创的算法,将parse的速度提升到极致,号称超过所有Json库。而且,使用Fastjson解析时,除了需要使用Fastjson所提供的jar包外,再不需要额外的jar包,就能够直接跑在JDK上。

    2、解析原理:

      基于事件驱动,与GSON相同,先创建一个对应于JSON数据的JavaBean类就可以通过简单的操作解析出所需JSON数据。但和Gson解析不同的是,GSON可按需解析,即创建的JavaBean类不一定完全涵盖所要解析的JSON数据,按需创建属性,但Jackson解析对应的JavaBean必须把Json数据里面的所有key都有所对应,即必须把JSON内的数据所有解析出来,无法按需解析。但Jackson的解析速度和效率都要比GSON高   

    3、优势

    1、快速FAST(比任何一款都快) 
    2、面向对象 
    3、功能强大(支持普通JDK类任意java bean Class,Collection,Map,Date或者enum) 
    4、零依赖(只需要有JDK即可) 
    5、支持注解,全类型序列化

    4、代码

    import com.alibaba.fastjson.JSON;
    
    import java.util.Date;
    
    public class faskjson {
        public static void main(String[] args) {
            System.out.println(JSON.toJSONString(new user(1, "张三", "男", new Date())));
        }
    
    }

     user代码在上面

    运行结果

    上面介绍了Jackson、Gson、FastJson的基本内容,细心的朋友可能发现介绍Gson与FastJson时我并未提及他们的缺点,并不是说这2个框架没有缺点,只是相对与其他的框架他们的缺点并不突出。

    上面特别介绍了Jackson的缺点,以及推荐了它使用的场景,那么其他场景下还是不建议大家使用,这点对于开发者来说其实也是需要考虑的一个问题,如果该库的API使用难度大,或者很复杂,那么不建议使用,毕竟JSON解析的性能差异并不大。

    FastJSON、Gson和Jackson性能对比

    JSON序列化(Object => JSON)

    测试样本数量为100000个,为了保证每个类库在测试中都能处理同一个样本,先把样本Java对象保存在文件中。每个类库测试3次,每次循环测试10遍,去掉最快速度和最慢速度,对剩下的8遍求平均值作为最终的速,取3次测试中最好的平均速度作为最终的测试数据。

    类库样本数量执行次数最长时间(毫秒)最短时间(毫秒)平均时间(毫秒)
    FastJSON 100000 10 2291.22 1416.70 1454.93
    Jackson 100000 10 1980.92 841.91 880.82
    Gson 100000 10 2383.02 1469.08 1520.38

     从测试数据可知,FastJSON和GsonJSON序列化的速度差不多,Jackson是最快的(用时Gson少大约600毫秒)。

    JSON反序列化(JSON => Object)

    测试样本数量为100000个,为了保证每个类库在测试中都能处理同一个样本,先把样本JSON对象保存在文件中。每个类库测试3次,每次循环测试10遍,去掉最快速度和最慢速度,对剩下的8遍求平均值作为最终的速,取3次测试中最好的平均速度作为最终的测试数据。

    类库样本数量执行次数最长时间(毫秒)最短时间(毫秒)平均时间(毫秒)
    FastJSON 100000 10 7942.31 6340.55 6526.41
    Jackson 100000 10 7957.22 6623.85 6815.41
    Gson 100000 10 8235.15 7006.06 7364.75

     从测试数据可知,三个类库在反序列化上性能比较接近,Gson稍微差一些。

    总结

    把Java对象JSON序列化,Jackson速度最快,在测试中比Gson快接近50%,FastJSON和Gson速度接近。 
    把JSON反序列化成Java对象,FastJSON、Jackson速度接近,Gson速度稍慢,不过差距很小。

    包和项目地址:https://github.com/weibanggang/tojson

     

     

  • 相关阅读:
    九项重要的职业规划提示
    Java程序员应该掌握的十项技术
    把QQ炫铃变为本机系统提示音
    maven 安装jar到库中
    Java程序连接各种数据库的方法
    J2EE体系架构概述
    一个完整的项目管理流程(适合软件开发)
    JavaScript函数调用时的作用域链和调用对象是如何形成的及与闭包的关系
    iframe自适应及offsetHeight/Width+scrollHeight/Width区别
    JavaBean的绑定属性及约束属性[转]
  • 原文地址:https://www.cnblogs.com/weibanggang/p/9517223.html
Copyright © 2011-2022 走看看