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 ...
随机推荐
- STM32Cubemx出现工程突然自动退出的问题
STM32Cubemx出现工程突然自动退出的问题 转载请注明出处,谢谢 https://www.cnblogs.com/kevin-nancy/p/10561944.html 或者 https://b ...
- JS实现多少小时前,多少天前...
最近需要实现题目的功能,因为我的时间戳是PHP生成的,所以转换JS时间戳需要乘1000,废话不多说,看下面的代码把! 大家可以判断一下传进来的值是否为数值型,还有判断是否比当前的时间戳大!可以根据结果 ...
- LaTex 2
LaTex 入门 此时是否安装成功 如果安装成功了LaTeX, 那么在计算机上会多出来LaTeX的编译器, LaTex Live 安装包在计算机上安装了多个不同的编译器, 有latex, xelate ...
- HDU 4027—— Can you answer these queries?——————【线段树区间开方,区间求和】
Can you answer these queries? Time Limit:2000MS Memory Limit:65768KB 64bit IO Format:%I64d & ...
- gcc 链接非标准名称库
一般库的标准名称是libxxx.so或者libxxx.a, 如果没有, 也可以搞个linkname出来, 那就可以直接用 "-lxxx" 来链接了, 但要是你想直接用realnam ...
- Ubuntu系统修改Python软链接
1.查看使用的版本 python --version 2.查看当前所使用版本的位置 which python 3.如果第二步结果是 /usr/bin/python 则直接删除即可 sudo rm /u ...
- JS预编译详解
我们都知道javascript是解释型语言,执行的特点呢是编译一行,执行一行.按照这个思路有时候我们在运行代码时会有一些令人费解的现象出现.下面我们一起来执行下面三段代码. <script> ...
- React.js学习小结
最近一段时间都在学习React.js,感觉还不错,现在把自己的一些学习笔记记录一下,留着以后学习查看. 0.React全家桶(技术栈) 1.React主体 2.WebPack:grunt.gulp自动 ...
- cf1064E. Dwarves, Hats and Extrasensory Abilities(二分 交互)
题意 题目链接 \(n\)次操作,每次你给出一个点的坐标,系统会返回该点的颜色(黑 / 白),程序最后输出一条直线把所有黑点和白点分隔开 Sol 一个很直观的想法:首先询问\((dx, 0)\),然后 ...
- zookeeper的JavaAPI
org.apache.zookeeper.Zookeeper Zookeeper 是在 Java 中客户端主类,负责建立与 zookeeper 集群的会话,并提供方法进行操作. org.apache. ...
