为什么我们公司强制弃坑Fastjson了?主推Jackson

news/2024/7/24 3:54:52 标签: json, cloud, 微软, gson, 办公软件

点击上方 果汁简历 ,选择“置顶公众号”

优质文章,第一时间送达

来源:toutiao.com/i6815906868183958027

  • 一、FastJson为何

  • 二、真的很快吗?

  • 三、FastJson并没有那么流行

  • 四、弃坑fastjson


一、FastJson为何

首先抄录一段来自官网的介绍:FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

FastJson是Java程序员常用到的类库之一,相信点开这个页面的你,也肯定是程序员朋友。正如其名,“快”是其主要卖点。

二、真的很快吗?

没有调研就没有发言权,本着“追求真理”的初心,来一轮简单的测试。对比对象选择应用最广泛的Jackson和Google出品的Gson。测试环境选择JDK 8,AMD 3700X,3200MHZ内存。简化实验,只测试简单对象和复杂对象的String转对象、对象转String,调用1千万次的对比结果如下(时间单位是毫秒):

从测试结果看,FastJson确实是最快的,但仅比Jackson快20%左右,Google的Gson是最慢的,差距较大。读到这里,是不是觉得选择FastJson肯定没错啊!如果面试官问为什么选择FastJson?因为快!这一个理由就可以把他顶回去了。

这里的调查研究并不是很充分,没有对内存占用、大文档的测试。

在现代应用程序中,即使最慢的Gson,也是满足需求的;解析文档速度的快慢,并不能作为选型的唯一标准,可能连主要标准都算不上。对IO优化,并行处理等优化措施,比选用一个更快的库更有效。

三、FastJson并没有那么流行

然而,FastJson并没有那么流行,有一个最直观的数据,那就是在Maven的中的引用量,和Jackson和Gson不在一个数量级,和Jackson强大的家族更没法比。

难道我用了一个假的流行的国产类库?在知乎看到了一篇帖子,讨论为什么外国友人不喜欢FastJson。结论就是FastJson是个代码质量不高的国产类库。完全颠覆了我的认知,因为在我的项目中,是经常使用FastJson的,并没有出现什么Bug,而且这段评论是在2016年写的。

抱着怀疑的态度,打开FastJson的地址,看到大家提的Issues。竟然有1283个未解决的Issues。红框标识出来的,我自己拿去研究下,因为我看到下面还有人提了一样的问题。

测试代码如下:

果然,在采用了最新版本的类库后,如问题描述的,还是有异常。于是就看到了如下的源代码:

这段代码有严重的逻辑错误,这样错误的格式,例如:

“1970-01-01 00:00:00.000000000.000000000”

或者

“1970-01-01 00:00:00.000000000.000000”

也能转换成功,而一些正确的格式,例如:

““1970-01-01 00:00:00”,““1970-01-01 00:00:00.000”

却转换失败。

结合知乎上网友的点评,我本人也觉得FastJson并没有那么优秀,另一些深入的点评,例如ASM,我的理解并不深,就不做测试了。

四、弃坑fastjson

在我负责的项目中,因为SpringBoot相关的框架中,应用了Jackson,本着“最少依赖”的原则,json解析应用了Jackson。但是很多同事的代码中,也用了Gson和Fastjson,当然,是没有严格规范要求的结果。

通过今天的一个小小研究,Jackson的流行,是有着内在的原因的。在我们以后的项目中,主推Jackson,逐渐的淘汰Fastjson



往期精彩回顾

让人又爱又恨的 Lombok,到底该不该用

Delombok 是个啥?居然可破 Lombok?

跳槽的必要条件是有一份好的简历

时候为自己的后半生考虑了——致奔三的互联网人

点个赞呗


http://www.niftyadmin.cn/n/1332253.html

相关文章

Alibaba Java Code Guidelines插件安装使用

1.下载插件 在settings-plugins中下载阿里java编码规范插件 2.安装并重启idea 3.检测代码 在重启idea后,可以 在类文件或者 project上右键检测代码规范 4.查看检测到的’坏味道’,例如魔法数字 5.规则修改和关闭 通常Bug的严重程度(Sev…

Spring Boot 无侵入式 实现 API 接口统一JSON格式返回,倍爽!

点击上方 果汁简历 ,选择“置顶公众号”优质文章,第一时间送达作者:小魏小魏我们去那里呀blog.csdn.net/qq_34347620/article/details/102239179无侵入式 统一返回JSON格式其实本没有没打算写这篇博客的,但还是要写一下写这篇博客…

Docker 部署jar包

1.创建Dockerfile文件 vim Dockerfile 内容如下: FROM anapsix/alpine-java:8_server-jre_unlimited MAINTAINER chenkang163.com RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime EXPOSE 8000 ADD ./cero-wechat-mp-system-1.0.0-SNAPSHOT.jar ./ C…

扎心一问!你凭什么成为年薪80W的Java架构师?

不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。很多人在问我,程序员如何拿高薪&…

微信公众号后台开发

最近公司要做微信工作号开发,觉得有趣,便接了这单活。 1.首先已经申请了微信工作号,打开微信公众号平台 https://mp.weixin.qq.com/ AppId是这个公众号的唯一识别码,相当于登录名 AppSecret 是公众号的开发者密码,就相…

阿里技术文档:Redis+Nginx+设计模式+Spring全家桶+Dubbo精选

又到了“金九银十”面试求职高峰期,在金三银四时也参与过不少面试,2020都说工作不好找,也是对开发人员的要求变高。前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档(1000道高频题)&#x…

springboot 解决CORS跨域问题

1.实现Filter package com.github.binarywang.demo.wx.mp.config;import org.springframework.context.annotation.Configuration;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletResponse; import java.io.IOExc…