当前位置:网站首页 > 技术博客 > 正文

fastjson-1.2.53.jar



  • FASTJSON相对其他JSON库的特点是,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。

  • Fastjson2相对Fastjson1版本可以说是一次完全重构
    • 这里从代码的角度,分析两者的一些区别;
    • 并总结一些新的,让小伙伴们使用Fastjson2或者进行功能扩展的时候,能更加顺畅。
    • 除了在性能方面的提升之外,Fastjson 2还解决了一系列安全方面的问题和兼容性的问题,这很大的提高了使用的便捷性
  • FASTJSON v2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库
  • 通过同一套API:
    • 更安全: AutoType 必须显式打开才能使用,没有任何白名单,也不包括任何 Exception 类的白名单。这可以保证缺省配置下是安全的。
    • 支持JSON/JSONB两种协议;
    • JSONPath 是一等公民;
    • 支持全量解析部分解析(基于)
    • 支持Java服务端客户端Android、大数据场景;支持Kotlin
    • 支持JSON Schema
    • 支持Graal Native-Image

fastjson、jackson 都支持 AutoType 功能,这个功能在序列化的 JSON 字符串中带上类型信息,在反序列化时,不需要传入类型,实现自动类型识别

fastjson 1.x 内部维护了一个的白名单,java 发展近 30 年难免有些漏网之鱼,这也造成近几年 fastjson 安全漏洞频发。

  • fastjson2 AutoType 必须显式打开才能使用,没有任何白名单,也不包括任何 Exception 类的白名单。这可以保证缺省配置下是安全的
  • 序列化时带上类型信息,需要使用 。比如:
 
  
  • 很多时候,root对象是可以知道类型的,里面的对象字段是基类或者不确定类型,这个时候不输出root对象的类型信息,可以减少序列化结果的大小,也能提升反序列化的性能。
 
  
  • 反序列化打开AutoType功能支持自动类型
 
  
  • fastjson2 AutoType 支持配置 safeMode,在 safeMode 打开后,显式传入 AutoType 参数也不起作用,具体配置如下:
 
  
  • fastjson2 AutoType 会经过内置黑名单过滤。
    • 虽然该黑名单能拦截大部分常见风险,但是这个机制不能保证绝对安全
    • 故:打开 AutoType 【不应该】在暴露在公网的场景下使用
  • V1
 
  

截止 2023-11-07 的最新版本为 1.2.83

  • V2
 
  

注意:groupId 和v1版本的相比,有所改变。

官方说明:如果原来使用fastjson 1.2.x版本,可以使用兼容包,兼容包不能保证100%兼容,请仔细测试验证,发现问题请及时反馈。兼容包坐标如下:

  • 兼容包
 
  

在fastjson 2.0中,package和1.x不一样,是com.alibaba.fastjson2。如果你之前用的是fastjson1,大多数情况直接更换包名就即可。

V1

 
  

V2

 
  
 
  
  • 时间转化类由原来使用SimpleDateFormat转化为 JDK8 提供的,吸收了 joda-time的部分精华,功能更强大,性能也更好。
  • 同时, 是线程安全的。
  • 测试类
 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
  
  • 可用于反序列化时对字段进行验证使用,配置可以通过/,这里以为例
 
  
  • Test Code
 
  

序列化的实现可以参考官方的一张类图:

大致流程:

  • 获取
  • 如果从缓存有,直接提取
  • 如果缓存没有,构造对应的,并缓存
  • 获取到后,将对象写入
  • 对基础类型进行写入
  • 返回结果
  • https://github.com/alibaba/fastjson2/blob/3e0bc5500c56791ea61e8239b0bf029eb2bfd340/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplEnum.java#L11
  1. 当用户没有自定义 时,序列化结果中枚举属性字段将被序列化为:。
  2. 当用户序列化时在调用重新自定义的时,方法将因值为null而在将报空指针异常。

注:官方版中已修复此问题

  • https://github.com/alibaba/fastjson2/commit/9ec75783dedc961f6a194eb44c5f45f04
  • https://github.com/alibaba/fastjson2/blob/3e0bc5500c56791ea61e8239b0bf029eb2bfd340/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplEnum.java#L11
 
  
  • json是保存为文本格式的
  • jsonb是保存为二进制格式的
  • 这主要有三方面的影响:
  • jsonb通常比json占用更多的磁盘空间(有些情况不是)
  • jsonb比json的写入更耗时间
  • json的操作比jsonb的操作明显更耗时间(在操作一个json类型值时需要每次都去解析)

详情参见:

  • JSON和JSONB两者有什么区别 - 亿速云
  • 阿里Fastjson2强势发布,快看看它有什么改变 - 百度
  • Fastjon2他来了,性能显著提升,还能再战十年 - CSDN
  • 安全问题我们需要重视,立刻升级fastjson2 - 百度
  • Fastjson2基础使用以及底层序列化/反序列化实现探究 - 博客园 【推荐】

Fastjson 的原理 / JSONPath的使用 等

  • maven
    • https://github.com/alibaba/fastjson/releases
    • https://github.com/alibaba/fastjson2/releases
    • https://repo1.maven.org/maven2/com/alibaba/fastjson/
    • https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/
  • github
    • https://github.com/alibaba/fastjson
      • https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
    • https://github.com/alibaba/fastjson2
    • https://alibaba.github.io/fastjson2/ 【推荐】

版权声明


相关文章:

  • 内存检测工具memtest怎么看结果2025-07-21 20:30:02
  • 流量监控平台2025-07-21 20:30:02
  • 线程锁有哪些锁2025-07-21 20:30:02
  • c++语言程序设计2025-07-21 20:30:02
  • linux等待进程结束2025-07-21 20:30:02
  • linux系统发行版本号查询2025-07-21 20:30:02
  • linux中user是什么意思2025-07-21 20:30:02
  • 大端模式和小端模式的优缺点2025-07-21 20:30:02
  • mysql触发器(MySQL触发器 (通过Navicat 编辑))2025-07-21 20:30:02
  • linux m42025-07-21 20:30:02