Fastjson2
新一代高性能 JSON 库

Fastjson2 Maven 快速上手 快速迁移指南 性能优化

更新日期 2026-04-18 fastjson2 2.0.61 for Java 8+

Fastjson2 Core
Fastjson v1 (Legacy)

Fastjson2 是什么

Fastjson2 是 FASTJSON 项目的下一代高性能 JSON 库。它是对原先 Fastjson 版本的完全重构,旨在提供极致的性能体验。作为一款 Java 语言编写的 JSON 处理器,它能够极大地提升 JSON 序列化与反序列化的速度,并彻底解决了旧版本中存在的许多安全漏洞。

Fastjson2 下载与集成

推荐使用 Maven 或 Gradle 构建工具自动集成 Fastjson2。可在 Fastjson2 Maven 上查看最新发布版本。目前稳定版本为 2.0.61系列。

  • Maven 依赖:com.alibaba.fastjson2:fastjson2:2.0.61

  • 最新更新日期:2026-02-07

Fastjson2 安装与配置

1. 在 Maven 项目的 pom.xml 中添加依赖

<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.61</version>
</dependency>

2. 如果是 Android 项目,请使用专门的 android 版本:

<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2-android</artifactId>
    <version>2.0.61</version>
</dependency>

Fastjson2 切换国内镜像

由于 Maven 中央仓库在国内访问较慢,建议在 settings.xml 中配置阿里云镜像源,以加快依赖库的下载速度:

阿里云镜像配置:

<mirror>
 <id>aliyunmaven</id>
 <mirrorOf>*</mirrorOf>
 <name>阿里云公共仓库</name>
 <url>https://maven.aliyun.com/repository/public</url>
</mirror>           

常用核心方法提示

  • JSON.toJSONString(obj):将 Java 对象序列化为 JSON 字符串。

  • JSON.parseObject(jsonStr, Class.class):将 JSON 字符串反序列化为特定的 Java 对象。

  • JSON.parseArray(jsonStr, Class.class):将 JSON 字符串反序列化为对象列表。

  • JSONPath.eval(obj, path):使用 JSONPath 语法从对象中快速提取数据。

  • JSONB.encode(obj):将对象编码为 Fastjson2 特有的二进制 JSONB 格式,性能更高。

  • JSONObject.from(obj):将普通 POJO 对象转换为 JSONObject 对象。

序列化 Java 对象

String text = JSON.toJSONString(user); 将对象转换为 JSON 文本。

可以使用 JSONWriter.Feature 参数来自定义序列化行为,例如格式化输出:

String text = JSON.toJSONString(user, JSONWriter.Feature.PrettyFormat);

看下面的Java对象序列化的例子

import com.alibaba.fastjson2.JSON;
import java.time.LocalDate;

// 定义一个简单的实体类
public class User {
    private String name;
    private int age;
    private LocalDate birthday;

    // 构造器、getter/setter 省略(可使用 Lombok @Data)
}

// 序列化
User user = new User();
user.setName("张三");
user.setAge(30);
user.setBirthday(LocalDate.of(1996, 5, 15));

String jsonString = JSON.toJSONString(user);
System.out.println(jsonString);
// 输出:{"age":30,"birthday":"1996-05-15","name":"张三"}

反序列化 JSON

User user = JSON.parseObject(jsonStr, User.class); 这是最常用的反序列化方式。

如果数据是数组格式,使用:List<User> users = JSON.parseArray(jsonStr, User.class);

看下面反序列化json的例子

String json = "{\"name\":\"李四\",\"age\":32,\"birthday\":\"1994-08-20\"}";
User user = JSON.parseObject(json, User.class);
System.out.println(user.getName());  // 输出:李四
System.out.println(user.getAge());   // 输出:32         

处理集合与泛型

// 列表反序列化
List<User> users = JSON.parseArray("[{\"name\":\"A\"},{\"name\":\"B\"}]", User.class);

// 泛型(如 Map<String, User>)
Type type = new TypeReference<Map<String, User>>() {}.getType();
Map<String, User> map = JSON.parseObject(jsonStr, type);

JSONObject / JSONArray 解析

JSONObject obj = JSON.parseObject("{\"id\":1,\"name\":\"test\"}");
String name = obj.getString("name");
int id = obj.getIntValue("id");

JSONArray arr = JSON.parseArray("[1,2,3]");
int first = arr.getIntValue(0);

JSONPath 支持

使用 JSONPath 可以像 XPath 访问 XML 一样快速提取 JSON 中的特定数据。

String json = "{\"store\":{\"book\":[{\"title\":\"Java编程\"},{\"title\":\"Python入门\"}]}}";
Object obj = JSON.parse(json);

// 获取所有书名
List<String> titles = (List<String>) JSONPath.eval(obj, "$.store.book[*].title");
// 获取第一个书名
String firstTitle = (String) JSONPath.eval(obj, "$.store.book[0].title");

JSONB 二进制格式

JSONB 是 Fastjson2 独有的二进制序列化格式,比普通 JSON 更小、解析更快,适用于高性能内部通信。

User user = new User("张三", 30);
byte[] bytes = JSONB.toBytes(user);          // 序列化为字节数组
User deserialized = JSONB.parseObject(bytes, User.class);  // 反序列化

// 也支持直接与 JSONObject 互转
JSONObject obj = JSONB.parseObject(bytes, JSONObject.class);

常用配置与特性

通过 JSONWriter.FeatureJSONReader.Feature 控制序列化/反序列化行为。

// 格式化输出(美化)
String pretty = JSON.toJSONString(user, JSONWriter.Feature.PrettyFormat);

// 输出时按字段顺序排序
String sorted = JSON.toJSONString(user, JSONWriter.Feature.OrderedField);

// 反序列化时允许注释(非标准 JSON)
JSON.parseObject("/*注释*/{\"name\":\"test\"}", User.class, JSONReader.Feature.AllowComment);

字段命名策略

使用 @JSONField 或全局配置来映射不同命名风格(如驼峰、下划线)。

// 全局配置:输出时使用下划线命名
JSON.config(JSONWriter.Feature.FieldBased, JSONWriter.Feature.UseNativeCharset);
// 推荐在 Bean 上使用注解更清晰

public class Order {
    @JSONField(name = "order_id")
    private Long orderId;
    
    @JSONField(name = "user_name")
    private String userName;
}

日期格式化

默认日期格式为 ISO 8601(如 2026-02-07),可通过注解或全局配置修改。

public class Event {
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date occurTime;
}

// 全局配置
JSON.config(JSONWriter.Feature.WriteDateUseDateFormat);  // 使用 yyyy-MM-dd HH:mm:ss
JSON.config(JSONWriter.Feature.UseISO8601DateFormat);    // 使用 ISO 8601

忽略空值

序列化时跳过值为 null 的字段,减小 JSON 体积。

User user = new User("张三", null);  // age = null
// 默认会输出 {"age":null,"name":"张三"}
String json = JSON.toJSONString(user, JSONWriter.Feature.IgnoreNullValues);
System.out.println(json); // {"name":"张三"}

@JSONField 注解详解

@JSONField 可作用于字段、getter/setter,控制序列化/反序列化的各种细节。

public class Product {
    // 指定 JSON 中的字段名
    @JSONField(name = "product_id")
    private Long id;

    // 指定日期格式
    @JSONField(format = "yyyy/MM/dd")
    private Date createTime;

    // 序列化时忽略该字段
    @JSONField(serialize = false)
    private String internalCode;

    // 反序列化时忽略该字段
    @JSONField(deserialize = false)
    private String computedField;

    // 指定字段顺序(值越小越靠前)
    @JSONField(ordinal = 1)
    private String name;
}

实际案例:Web API 交互

在 Spring Boot 控制器中直接使用 Fastjson2 处理请求与响应。

@RestController
public class UserController {
    
    @PostMapping("/user")
    public User createUser(@RequestBody String json) {
        // 手动反序列化
        User user = JSON.parseObject(json, User.class);
        // 处理业务...
        return user;
    }
    
    @GetMapping("/user/{id}")
    public String getUser(@PathVariable Long id) {
        User user = userService.get(id);
        // 手动序列化并返回,可添加特色格式
        return JSON.toJSONString(user, JSONWriter.Feature.PrettyFormat);
    }
}

建议在 Spring Boot 中替换默认的 Jackson 为 Fastjson2,配置 HttpMessageConverter 即可。

总结与最佳实践

Fastjson2 是一款高成熟度、高性能、安全的 JSON 库,完全值得作为新项目的首选或旧项目的替代。通过合理利用 JSONPath、JSONB、注解配置以及性能优化技巧,可以显著提升开发效率与系统吞吐量。建议从 Fastjson 1.x 尽早迁移,以获得更好的安全性和性能表现。

核心推荐:日常开发使用 JSON.toJSONString / parseObject;内部 RPC 使用 JSONB;复杂查询使用 JSONPath;关注字段命名和日期格式统一,善用 @JSONField 注解。定期关注版本更新,应用最新优化与修复。