JSON

比Gson解析速度快10倍!——Json解析神器Jackson使用介绍

字号+ 作者:H5之家 来源:H5之家 2017-03-03 11:01 我要评论( )

#65279;#65279;转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中,我们介绍了Json数据格式和系统自带Json以及Google的Gson项目,如果



转载请注明出处:

    在前面的两篇文章中,我们介绍了Json数据格式和系统自带Json以及Google的Gson项目,如果能学会这些东西,基本能满足工作需求了。但是,程序员都有追求极致效率的嗜好,在满足了基本需求之后,我们会考虑能不能再优化一下效率呢?当然!今天这篇文章要介绍的,就是在数据量比较大的时候,比Gson的解析效率高近10倍的Json数据解析框架— —Jackson!

    下面是一个大神关于几个常见的Json数据的解析速度的测试结果,原文请戳

    

 

    我们从上图可以看出,在大数据量的情况下,Jackson的速度比Gson的解析速度快了不是一点半点,所以,最推荐大家使用的就是Jackson框架,来,咱们一起看看怎么用!

    我们先介绍一下常用的几个类的功能:

JsonFactory:这个类是Jackson项目主要的工厂方法,主要用于配置和构建解析器(比如 JsonParser)和生成器(比如 JsonGenerator),这个工厂实例是线程安全的,如果有配置的话,可以重复使用。

JsonGenerator:这个类主要是用来生成Json格式的内容的,我们可以使用JsonFactory的方法生成一个实例。

JsonParser:这个主要是用来读取Json格式的内容,并且完成解析操作的,我们可以使用JsonFactory的方法生成一个实例。

ObjectMapper:这个类提供了Java对象和Json之间的转化,主要通过JsonParser和JsonGenerator实例来完成实际的对Json数据的读写操作。这个类是ObjectCodec的子类,主要的实现细节都在ObjectCodec里面。而且这个类可以重复使用,所以一般会创建这个类的一个单例模式,比如下面的代码
    package com.example.jsondemo;  
      
    import org.codehaus.jackson.map.ObjectMapper;  
      
    /**
     *  
     * @ClassName: com.example.jsondemo.JacksonMapper
     * @Description:ObjectMapper的单例模式
     * @author zhaokaiqiang
     * @date 2014-11-27 下午4:06:52
     *  
     */  
    public class JacksonMapper {  
      
        private static final ObjectMapper mapper = new ObjectMapper();  
      
        private JacksonMapper() {  
        }  
      
        public static ObjectMapper getInstance() {  
            return mapper;  
        }  
      
    } 

  我们在下面的代码中,我们经常使用这个单例模式,大家不要迷惑。

 

1.简单对象的Json数据生成

    这里所说的简单对象指的是单一对象或者是对象的集合类。

    下面我们先看代码实现,然后讲解一些细节。

    实现的方法有两种,先看第一种,如下:
public String getJsonString(Object object) throws Exception {  
    return JacksonMapper.getInstance().writeValueAsString(object);  
}
在这种方法中,我们直接使用ObjectMapper类的writeValueAsString(),就可以把对象的json格式作为返回值直接返回。

    除此之外,我们还可以使用第二种方法,代码如下
    public String getJsonString1(Object object) throws Exception {  
            ObjectMapper mapper = JacksonMapper.getInstance();  
            StringWriter sw = new StringWriter();  
            JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);  
            mapper.writeValue(gen, object);  
            gen.flush();  
            gen.close();  
            return sw.toString();  
        } 
这种方法是使用JsonGenerator和StringWriter对象,通过ObjectMapper,把转换好的Json数据写到了StringWriter里面,然后toString()就可以拿到我们需要的Json数据了。

    这里再多说一句,从第二种方法的方式里,我们可以看到操作非常像Java里面的IO流的处理,实际上,Jackson确实是以流的方式对数据进行处理的,这也是它处理速度这么快的原因所在。

    因为第一种方法更加的简洁,所以推荐大家使用。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • [转载]STM32 ARM开发板神器,31个经典实例教程

    [转载]STM32 ARM开发板神器,31个经典实例教程

    2015-11-21 16:28

网友点评