Fastjson
Fastjson是阿里巴巴开源的一个Java语言JSON处理库,用于把Java对象序列化成JSON文本,也用于把JSON文本反序列化回Java对象。它具有单jar、零依赖、API简洁的特点,长期被用于Web接口、缓存、RPC与消息队列等数据交换场景。2011年起以Apache 2.0协议开源,2022年推出的2.0版本以新包名重写,并在默认配置下关闭AutoType以改善安全性。
定义
Fastjson是一个用Java编写的JSON处理器(JSON parser + JSON generator),同时具备解析与生成两种能力。它可以把Java对象转换成JSON格式的字符串,也可以把JSON字符串还原为对应的Java对象,包括没有源码、无法修改的既有类[1]。该库的核心入口是一个名为JSON的类,序列化调用toJSONString,反序列化调用parseObject,也支持通过@JSONField注解声明字段名、日期格式和序列化顺序[2]。
它对外只以一个jar包提供,不依赖其他第三方库,并支持较完整的Java泛型、自定义对象表示以及继承层次较深的复杂对象[1][3]。项目以Apache 2.0许可证发布[1]。
原理
Fastjson的基本工作方式是词法与语法解析:读取JSON文本后建立JSONObject、JSONArray等中间结构,或按目标类型把字段值映射到Java对象的属性上;输出方向则遍历对象的字段与getter方法,拼接成JSON文本。除全量解析外,它还提供JSONPath,可在Java程序中按路径表达式定位和求值JSON中的某个节点,不必先把整份数据完整反序列化[2]。
反序列化过程中的类型处理机制与其安全性直接相关。当JSON文本中含有@type字段时,Fastjson会把该值当作类名去加载并实例化,这一能力称为AutoType;2.0版本改用流式解析,并通过FNV-1a等增量哈希与白名单文本比对来判断类型名是否被接受[4]。与之并行的JSONB是二进制格式,同一套API既可读写JSON文本,也可读写JSONB字节流。
2.0版本新增的JSONPath可按路径直接从输入流中抽取字段,从而只解析需要的那部分内容,减少中间对象的创建[5]。该设计使其在高并发接口与大数据读取场景中具有较低的解析开销。
发展历程
Fastjson的起点可追溯到2010年前后。阿里巴巴B2B平台技术部在建设应用监控系统Dragoon时需要一个高性能的JSON解析器,时任技术专家温绍锦(花名高铁)遂编写了这一解析器,它随后被命名为fastjson[3]。2011年11月3日,项目代码迁至GitHub托管,便于开发者fork与提交补丁[6]。
1.2.x系列长期是主要版本线,期间多次进行安全加固。1.2.68版本增加了AutoType黑名单,并首次引入safeMode配置,开启后无论白名单还是黑名单都不再支持AutoType[7]。2022年5月,官方在1.2.80及之前版本发现新风险后建议升级至1.2.83,并同期提供noneautotype版本,从构建上完全移除AutoType能力。
2022年4月,fastjson 2.0发布,是一次完整重写,目标是为下一个十年提供高性能JSON库;其Maven坐标与包名改为com.alibaba.fastjson2,与1.x可共存于同一项目[8]。官方后续说明,1.x已停止维护,当前开发重心在2.x。
应用
在Java Web开发中,Fastjson常用于RESTful接口的请求体与响应体编解码,也可作为Spring框架的消息转换器替换默认实现[9][10]。它可以接入缓存存储、RPC通信、消息队列通信、网络协议通信、Android客户端与Ajax服务端处理等场景[2]。
2.0版本进一步面向大数据与多端统一的场景设计,同一套API覆盖Java服务端、Android客户端与大数据处理,并提供Kotlin、JSON Schema、GraalVM Native Image等模块支持,还能针对JDK 11、JDK 17及Record等新特性进行优化[11][8]。JSONPath可用于从大体积报文或日志中抽取少量字段,是该库在数据管道中的常见用法。
局限
最主要的局限来自反序列化安全。AutoType允许JSON文本指定要实例化的类,若攻击者能控制传入的JSON,就可能借@type触发危险类加载;1.2.24及更早版本对此没有任何白名单限制,1.2.68起的safeMode虽可彻底禁用AutoType,但会带来兼容性影响,需要评估业务后再开启。后续仍出现过绕过黑名单的利用方式,例如2026年7月披露的隐患可在不依赖目标环境第三方类库的情况下触发代码执行,影响1.2.68至1.2.83[12]。
2.x并非没有安全问题。安全厂商披露,2.0.62及之前版本在未启用SupportAutoType的默认配置下,类型名校验的哈希比对存在缺陷,可被构造前缀碰撞绕过,CVSS评分9.8,官方随后以补丁加强白名单文本回校、并拒绝含冒号或感叹号的类型名[13][4]。
兼容性也是实际约束。2.x与1.x包名不同,不保证100%兼容,迁移需要测试;部分1.x API在2.x中已废弃,例如JSONArray.parseArray需改为JSON.parseArray[14]。此外,它的默认行为与Jackson、Gson等库在空值处理、字段命名匹配、日期格式识别上并不一致,替换时需显式配置[9][8]。
参见
参考资料
- fastjson [引用日期2026-10-29]
- JSON解析库(Fastjson) [引用日期2026-10-29]
- 温绍锦:初心不改的阿里初代开源人 | Gitee 封面人物第18期 [引用日期2026-10-29]
- 2026-07-27 · CSSA 2 · CVE 1 · 投毒 0 [引用日期2026-10-29]
- github.com 上的网页 [引用日期2026-10-29]
- Fastjson使用github托管代码 [引用日期2026-10-29]
- Releases · alibaba/fastjson - Skip to content [引用日期2026-10-29]
- Frequently Asked Questions [引用日期2026-10-29]
- 使用阿里巴巴 Fastjson 替代 Spring Boot 默认的 Jackson [引用日期2026-10-29]
- aliyun.com 上的网页 [引用日期2026-10-29]
- com.alibaba:fastjson on Maven [引用日期2026-10-29]
- Fastjson 1.2.x无需gadget远程代码执行漏洞通告 [引用日期2026-10-29]
- Fastjson 2.x远程代码执行漏洞通告 [引用日期2026-10-29]
- 下个十年高性能 JSON 库来了:fastjson2! [引用日期2026-10-29]