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;
- }
- }
运行结果
二、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
FastJSON、Gson、Jackson(简单了解使用)的更多相关文章
- Json 工具介绍 fastjson gson jackson
1. fastjson fastjson是一个Java语言编写的高性能功能完善的JSON库.它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致, 是目前Java语言中最快的J ...
- 常用json解析库比较及选择 fastjson & gson
一.常用json解析库比较及选择 1.简介 fastjson和gson是目前比较常用的json解析库,并且现在我们项目代码中,也在使用这两个解析库. fastjson 是由阿里开发的,号称是处理jso ...
- 【Json】fastjson与jackson常用操作记录
本文只是记录fastjson.jackson一些常用的操作方法,没作比较,网上写比较的文章很多啦. 1.对象转Json串 // fastjson String objStr = JSON.toJSON ...
- Android总结之json解析(FastJson Gson 对比)[申明:来源于网络]
Android总结之json解析(FastJson Gson 对比)[申明:来源于网络] 地址:http://blog.csdn.net/u014031072/article/details/5392 ...
- JSON 解析 (三)—— FastJSON与Jackson比较
一.方便性与性能 调用方便性而言: FastJSON提供了大量静态方法,调用简洁方便 Jackson须实例化类,调用相对繁琐,可通过封装成JSON工具类简化调用 性能而言: FastJSON反序列化的 ...
- 记一次FastJSON和Jackson解析json时遇到的中括号问题
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jadyer/article/details/24395015 完整版见https://jadyer. ...
- fastJson与jackson性能对比
转载:https://blog.csdn.net/u013433821/article/details/82905222最近项目用到fastJson和jackson,为了决定到底弃用哪个,随手写了个测 ...
- java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能对比
我们为什么要序列化 举个栗子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放.那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列 ...
- FastJson、Jackson、Gson进行Java对象转换Json细节处理
前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...
- FastJson、Jackson、Gson进行Java对象转换Json的细节处理
前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...
随机推荐
- 9 Essential Free Linux Transcoders(转码)
需要转码的理由千万种,所幸除了硬件转码之外,Linux平台还有很多开源工具可以借鉴,如该文章所示: 原文来自:9 Essential Free Linux Transcoders(http://www ...
- 数据库~大叔通过脚本生成poco实体
今天在做开发时,需要把表映射成实体,又没有EF这种工具,就从网上下了一个工具,但使用时觉得太重了,所以就自己写了一个,基于mysql的. 功能:输入表名,得到这个表的poco实体 SELECT COL ...
- TOJ 2815 Connect them (kruskal+并查集)
描述 You have n computers numbered from 1 to n and you want to connect them to make a small local area ...
- PHP流程控制之goto语句
goto 操作符可以用来跳转到程序中的另一位置.该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记.PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和 ...
- poj 1028 Web Navigation
Web Navigation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31088 Accepted: 13933 ...
- Poj 3667——hotel——————【线段树区间合并】
Hotel Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 13124 Accepted: 5664 Descriptio ...
- envi利用矢量数据对影像做多边形裁剪 (转)
2011-05-25 17:31:10| 分类: ENVI|举报|字号 订阅 来自:http://zhangling357522.blog.163.com/blog/static/184687296 ...
- JDE获取所有字典数据
select a.*,b.DTDL01 FROM crpctl.f0004 a,crpctl.f0004d b where a.dtsy =b.dtsy(+) and a.dtrt =b.dtrt(+ ...
- 域名和DNS服务器
概念性的东西: 域名: ①.百度:域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理 ...
- Java—集合框架List
集合的概念 现实生活中:很多的事物凑在一起 数学中的集合:具有共同属性的事物的总和 Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象 集合的作用 在类的内部,对数据进行组 ...