Fastjson2 全面使用指南(Java后端开发者专用)

11-高性能JSON库——fastjson2 fastjson2 阅读详情

一、Fastjson2 简介

Fastjson2 是阿里巴巴开源的高性能 JSON 处理库,是 fastjson 1.x 的升级版。相比旧版本,它在性能、安全性、功能扩展上均有显著提升:

  • 支持 JSONB 二进制格式(比文本 JSON 更高效)
  • 内置 JSONPath 查询引擎
  • 严格的安全机制(默认禁用 AutoType)
  • 兼容 Jackson/Spring 的注解规范
  • 支持流式处理超大 JSON 数据

📌 依赖配置(Maven):

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

二、基础使用场景详解

1. 将 JSON 解析为 JSONObject

import com.alibaba.fastjson2.JSONObject;

String jsonStr = "{\"name\":\"张三\", \"age\":30, \"isStudent\":false}";
// 解析 JSON 字符串为 JSONObject
JSONObject obj = JSON.parseObject(jsonStr);

// 获取字段值(自动类型转换)
String name = obj.getString("name"); // "张三"
int age = obj.getIntValue("age");    // 30
boolean isStudent = obj.getBoolean("isStudent"); // false

// 遍历所有字段
obj.forEach((key, value) -> {
    System.out.println(key + " => " + value);
});

2. 将 JSON 解析为 JSONArray

import com.alibaba.fastjson2.JSONArray;

String jsonArrayStr = "[\"苹果\", {\"id\":1, \"name\":\"香蕉\"}, 3.14]";
// 解析为 JSONArray
JSONArray array = JSON.parseArray(jsonArrayStr);

// 获取第一个元素(字符串)
String first = array.getString(0); // "苹果"

// 获取第二个元素(JSONObject)
JSONObject fruit = array.getJSONObject(1);
String fruitName = fruit.getString("name"); // "香蕉"

// 遍历数组
for (int i = 0; i < array.size(); i++) {
    System.out.println("第 " + i + " 项: " + array.get(i));
}

3. 将 JSON 解析为 Java 对象

import com.alibaba.fastjson2.JSON;

// 定义 JavaBean
public class User {
    private String name;
    private int age;
    private java.util.Date birthDate;
    
    // 必须有无参构造函数
    public User() {}
    // getter/setter...
}

String json = "{\"name\":\"李四\", \"age\":25, \"birthDate\":\"2000-01-01\"}";
// 直接解析为 User 对象
User user = JSON.parseObject(json, User.class);

// 自定义日期格式解析(通过 @JSONField 注解)
public class User {
    @JSONField(format = "yyyy-MM-dd") // 指定日期格式
    private java.util.Date birthDate;
    // ...
}

// 自动解析为 Date 对象
System.out.println(user.getBirthDate()); // 输出:Sat Jan 01 00:00:00 CST 2000

4. 将 Java 对象序列化为 JSON

User user = new User();
user.setName("王五");
user.setAge(30);

// 基础序列化
String jsonStr = JSON.toJSONString(user); 
// 输出: {"name":"王五","age":30}

// 格式化输出(带缩进)
String prettyJson = JSON.toJSONString(user, SerializerFeature.PrettyFormat);
// 输出:
// {
//   "name": "王五",
//   "age": 30
// }

// 排除 null 字段
String noNullJson = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);

5. 使用 JSONObject 和 JSONArray 动态操作数据

// 动态构建 JSON 对象
JSONObject obj = new JSONObject();
obj.put("name", "动态数据");
obj.put("score", 95.5);
obj.put("tags", new JSONArray(Arrays.asList("Java", "Spring")));

// 嵌套结构
JSONObject nested = new JSONObject();
nested.put("address", "北京");
obj.put("info", nested);

// 序列化为字符串
System.out.println(JSON.toJSONString(obj));
// 输出: {"name":"动态数据","score":95.5,"tags":["Java","Spring"],"info":{"address":"北京"}}

6. JavaBean 序列化为 JSON 的高级配置

// 自定义序列化选项
SerializerFeature[] features = {
    SerializerFeature.PrettyFormat, // 格式化
    SerializerFeature.WriteDateUseDateFormat, // 日期转字符串
    SerializerFeature.WriteNullStringAsEmpty // 空字符串转""
};

String customJson = JSON.toJSONString(user, features);

三、进阶使用场景

1. JSONB 二进制格式处理

// 序列化为 JSONB 二进制(更小体积、更快解析)
byte[] jsonbBytes = JSONB.toBytes(user);

// 反序列化 JSONB 数据
User user2 = JSONB.parseObject(jsonbBytes, User.class);

// JSONB 适合场景:
// - 服务间通信(如 RPC)
// - 缓存存储(Redis)
// - 大数据量传输

2. JSONPath 查询数据

String json = "{\"store\":{\"book\":[{\"title\":\"Java\"},{\"title\":\"Spring\"}]}}";

// 读取第一本书的标题
String title = JSONPath.read(json, "$.store.book[0].title").toString(); // "Java"

// 读取所有书名
List<String> titles = JSONPath.read(json, "$.store.book[*].title"); // ["Java", "Spring"]

// 修改数据
JSONPath.write(json, "$.store.book[0].title", "Java核心技术");
// 输出: {"store":{"book":[{"title":"Java核心技术"},...}}}

3. 处理 byte[] 类型的 JSONPath 查询

byte[] jsonbBytes = JSONB.toBytes("{\"name\":\"张三\",\"age\":30}");

// 直接对 byte[] 使用 JSONPath 查询
Object age = JSONPath.read(jsonbBytes, "$.age"); // 30

// 注意:JSONPath 支持直接处理 JSONB 格式的 byte[]

四、常用静态工具类详解

工具类作用使用场景示例
JSON基础 JSON 处理核心类字符串 JSON 的序列化/反序列化JSON.parseObject(str, User.class)
JSONB二进制 JSON 格式处理高性能场景(服务通信、缓存)JSONB.toBytes(obj), JSONB.parseObject(bytes, Class)
JSONPathJSON 数据查询引擎从复杂 JSON 中提取部分数据JSONPath.read(json, "$.path")
JSONWriter流式 JSON 序列化处理超大 JSON 数据(避免内存溢出)JSONWriter.of(out).writeObject(obj)
JSONReader流式 JSON 反序列化读取大文件或网络流式数据JSONReader.of(in).readObject(User.class)
SerializerFeature序列化选项配置控制输出格式(日期、空值、缩进等)JSON.toJSONString(obj, SerializerFeature.PrettyFormat)
ParseFeature解析选项配置处理非标准 JSON(单引号、注释等)JSON.parseObject(str, ParseFeature.AllowSingleQuotes)
JSONReaderConfig反序列化全局配置安全控制(禁用 AutoType)new JSONReaderConfig().setSupportAutoType(false)
JSONWriterConfig序列化全局配置统一序列化行为new JSONWriterConfig().setDateFormat("yyyy-MM-dd")

五、最佳实践与安全建议

✅ 推荐做法

  1. 优先使用 JSONB 格式

    • 服务间通信、Redis 缓存等场景优先使用 JSONB,比文本 JSON 性能提升 30% 以上
    • 示例:byte[] data = JSONB.toBytes(obj);
  2. 严格禁用 AutoType

    // 安全配置:禁用自动类型识别(防止反序列化漏洞)
    JSONReaderConfig config = new JSONReaderConfig();
    config.setSupportAutoType(false);
    JSONReader reader = JSONReader.of(jsonStr, config);
    
  3. 使用 JSONPath 优化查询

    • 当只需要 JSON 中的少量数据时,避免完整解析整个 JSON
    • 示例:JSONPath.read(json, "$.data.list[0].id") 比解析整个对象更高效
  4. 流式处理超大 JSON

    // 从文件流中读取大 JSON(避免 OOM)
    try (InputStream in = new FileInputStream("large.json")) {
        JSONReader reader = JSONReader.of(in);
        List<User> users = reader.readArray(User.class);
    }
    
  5. 自定义日期格式

    // 全局配置日期格式(推荐)
    JSONWriterConfig config = new JSONWriterConfig();
    config.setDateFormat("yyyy-MM-dd HH:mm:ss");
    JSON.setWriterConfig(config);
    

⚠️ 安全红线

  • 禁止启用 SupportAutoType:除非明确使用白名单机制
  • 不要直接反序列化不可信数据:外部传入的 JSON 必须经过严格校验
  • 敏感字段脱敏:使用 @JSONField(serialize = false) 隐藏密码等字段

🔍 性能优化技巧

场景优化方案
高频序列化使用 JSONWriter 流式写入
重复解析相同 JSON缓存解析后的 JSONObject
大数组处理使用 JSONReader.readArray() 流式读取
日期处理全局配置 setDateFormat 避免重复创建格式化器

六、完整示例:安全高效的 JSON 处理

// 安全配置:禁用 AutoType + 自定义日期格式
JSONWriterConfig writerConfig = new JSONWriterConfig();
writerConfig.setDateFormat("yyyy-MM-dd");
JSON.setWriterConfig(writerConfig);

JSONReaderConfig readerConfig = new JSONReaderConfig();
readerConfig.setSupportAutoType(false); // 严格禁止自动类型识别

// 序列化对象(安全模式)
User user = new User("张三", 30, new Date());
byte[] jsonb = JSONB.toBytes(user); // 二进制格式

// 反序列化(安全模式)
try {
    User parsed = JSONB.parseObject(jsonb, User.class, readerConfig);
    System.out.println(parsed.getName()); // 安全解析
} catch (Exception e) {
    // 处理非法数据
}

💡 总结:Fastjson2 是当前 Java 生态中性能最优、安全性最高的 JSON 库。在 SpringCloud 微服务中推荐使用 JSONB 格式进行服务间通信,配合 JSONPath 实现高效数据查询,同时严格遵循安全配置规范。

java深度使用fastjson2 FastJSON2 是一个快速的 JSON 处理库,支持 Java 对象与 JSON 数据之间的转换。将 Java 对象序列化为 JSON 字符串将 JSON 字符串反序列化为 Java 对象支持复杂的对象结构,包括嵌套对象、集合、泛型等我们定义一个包含嵌套对象和集合的复杂类结构。// 构造函数、getter 和 setter public User(String name , int age , Address address , List < String > hobbies) { 阅读详情

相关推荐

FastJson2.0介绍和使用

FASTJSON v2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库。通过同一套API,

全栈行动派的博客 6836

fastjson2 介绍及使用

fastjson2 是 FASTJSON 项目的重要升级,目标是为下一个十年提供一个高性能的JSON库, fastjson2 性能相比原先旧的 fastjson 有了很大提升,并且 fastjson2 更安全,完全删除autoType白名单,提升了安全性。关于fastjson2升级指南fastjson2 的github地址。

西凉的悲伤博客 3万+

Spring Boot项目从fastjson1.x升级到fastjson2,Redis序列化配置避坑指南

本文详细介绍了Spring Boot项目从fastjson1.x升级到fastjson2时Redis序列化配置的关键修改点和避坑指南。重点解析了fastjson2的核心变化,如包结构重构、SerializerFeature废弃等,并提供了自定义FastJson2JsonRedisSerializer实现和Redis配置类适配方案,帮助开发者顺利完成升级并优化性能。

天天开心 742

fastjson2使用

fastjson2使用

小何的博客 5296

FastJSON2 学习笔记

FASTJSON2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库。官方如是说。

灵台方寸山斜月三星洞 5820

Java FASTJSON2 一个性能极致并且简单易用的JSON库

Java FASTJSON2 一个性能极致并且简单易用的JSON库

一碗清深的博客 1460

Fastjson2 全面使用指南(Java后端开发者版)

本文介绍了Fastjson2在Java后端开发中的基础与高级用法。主要内容包括: 基础操作: JSON字符串与JSONObject、JSONArray的相互转换 Java对象与JSON的序列化/反序列化 使用JSONObject和JSONArray构建复杂JSON结构 高级特性: 配置序列化选项(如忽略null值、格式化输出) JavaBean的JSON序列化控制 文中通过完整代码示例展示了从简单到复杂的JSON处理场景,包括基本类型处理、对象映射和集合操作。Fastjson2提供了简洁高效的API,支持开

python15397的博客 1291

IIS - 会话cookie中缺少HttpOnly属性

不啰嗦,我们直接开始! 先进行常规设置 打开配置编辑器 选中图中节点,将httpOnlyCookies设置为true 然后。。。不起作用。。。 换种方式 通过配置出站规则getcookie添加HttpOnly 在Web.config中添加如下出站规则 <rewrite> <outboundRules> <rule name="Add HttpOnly"> <match serverVa.

。 21万+

FastJSON2 完全使用指南(Java 后端开发实战版)

FastJSON2是阿里巴巴开源的高性能JSON处理库,本文提供了完整的Java后端开发使用指南。主要包括: Maven依赖引入和Spring Boot替换Jackson的配置方式; 常见使用场景:JSON字符串解析为JSONObject/JSONArray/POJO、Java对象序列化; 动态构建JSON数据; 特性说明:支持泛型、忽略大小写、格式化输出等。该库性能优异,适合高并发场景,是Spring Boot项目中推荐的JSON处理方案之一。

python15397的博客 1597

手把手教你排查libstdc++.so.6版本问题:从GLIBCXX缺失到完美解决

本文深入解析Linux系统中常见的GLIBCXX版本缺失问题,以`ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version 'GLIBCXX_3.4.29' not found`为例,从动态链接原理入手,提供使用`strings`和`find`命令的诊断方法,并详细对比了四种解决方案的优缺点。文章重点推荐通过设置`LD_LIBRARY_PATH`或更新系统库的安全策略,并最终建议使用Docker容器化技术实现环境依赖的根治与统一管理。

j7k8l的博客 300

别光看原理图了!手把手教你用Altium Designer搞定STM32F411最小系统的PCB布局(附电源/晶振/复位电路实战)

本文详细介绍了使用Altium Designer进行STM32F411最小系统PCB布局的实战技巧,涵盖电源分配网络优化、高速信号布线及系统级布局策略。通过规范的工程结构建立、关键设计规则预设和核心电路模块布局,帮助工程师提升PCB设计效率与信号完整性。特别针对STM32最小系统的电源、晶振和复位电路提供了专业解决方案。

weixin_42653691的博客 166

FastJson2 标准使用指南(企业级 Java 后端开发规范版)

企业级 FastJson2 标准使用指南,针对 Java 后端开发场景,提供安全、高效的 JSON 处理规范。指南涵盖基础序列化/反序列化操作,强调类型安全与性能优先原则。核心要点包括:推荐使用 JSON.toJSONString() 进行序列化,避免 null 值输出;反序列化时必须指定目标类型(如 User.class),禁止使用无类型解析;处理集合时采用 JSON.parseType() 解决泛型擦除问题。所有示例均结合实际业务场景,确保代码可维护性,适用于 Spring Boot 微服务、REST

python15397的博客 1644

Win11网络卡顿?用Wireshark抓包5分钟定位问题(保姆级实战)

本文详细介绍了如何使用Wireshark在Win11系统中快速定位网络卡顿问题。通过5分钟抓包分析,作者成功发现TCP重传率高达37%的罪魁祸首,并提供了从准备工作到实战分析的保姆级教程,帮助用户解决游戏卡顿、视频会议延迟等常见网络问题。

weixin_28839629的博客 306

FASTJSON v2详解

FASTJSON 2是一个性能极致并且简单易用的Java JSON库。FASTJSON 2是FASTJSON项目的重要升级,和FASTJSON 1相比,性能有非常大的提升,解决了autoType功能因为兼容和白名单的安全性问题。性能极致,性能远超过其他流行JSON库,包括jackson/gson/org.json,性能数据: https://github.com/alibaba/fastjson2/wiki/fastjson_benchmark。

lw的博客 5268

android mtk camera如何自定义默认拍照与录像分辨率

本文详细解析了在Android MTK平台上自定义相机默认拍照与录像分辨率的方法。通过分析Camera2应用默认选择逻辑,定位并修改PictureSize.java与VideoQualityCaptureRequestConfig.java中的关键代码,实现绕过系统智能选择,强制指定最高或特定分辨率。文章还提供了进阶的可配置化方案与验证避坑指南,帮助开发者精准控制相机行为。

weixin_29194817的博客 430

结构方程模型amos的操作与应用pdf_AMOS结构方程进行医学问卷量表分析教程(一阶简单路径效应分析)...

在生物医药的数据统计分析中,要研究量表和量表之间的关系时候,由于维度题项较多,而不再是单一的变量,因此我们要使用AMOS结构方程进行处理。​ 举个例子,比如对住院患者的相关研究,设置了患者在住院期间的适应性量表和自我效能的量表,想考察患者适应性与自我效能之间的影响关系,或者说适应性的强弱是否会影响到患者自我效能的高低。此时适应性量表和自我效能量表都不是单一的变量,而是有N个题项构成的...

weixin_39637614的博客 7707

FastJson2 完整使用指导文档(Java 后端企业级实战版)

FastJson2是阿里巴巴开源的高性能JSON库,作为FastJson 1.x的重构版本,在性能、安全性和功能上全面升级。它提供了高效的JSON序列化/反序列化能力,支持复杂数据结构处理,并修复了1.x版本的安全漏洞。相比Jackson和GSON,FastJson2在性能上具有明显优势(序列化速度快2倍以上),同时完全兼容Java 8+新特性。文档包含详细的代码示例,展示基础用法如对象序列化、JSON字符串解析等,适合Java后端开发者用于企业级应用开发,特别是在高并发场景下可显著降低系统负载。

python15397的博客 3146

Windows11开机必看:3种方法跳过联网激活(含最新OOBE命令)

本文详细介绍了Windows11新机开箱时绕过联网激活的三种实用方法,包括任务管理器终止进程法、命令行强制终止法和最新的OOBE\BYPASSNRO命令法。特别推荐使用微软官方预留的OOBE命令,操作简单且无副作用,帮助用户快速完成系统设置。

weixin_28366353的博客 1623

fastjson 2

1. FASTJSON 2.0介绍 FASTJSON 2.0是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库,同一套API支持JSON/JSONB两种协议,JSONPath是一等公民,支持全量解析和部分解析,支持Java服务端、客户端Android、大数据场景。 FASJTONS2代码 https://github.com/alibaba/fastjson2/releases/tag/2.0.1 JSONB格式文档 https://github.com/ali

qq_46494427的博客 2646

资产会计 Transaction Type 与业务交易的 Post to Affiliated Company 不一致导致的 AAPO176:成因剖析与修复指引

本文解析了SAP资产会计中常见的"AAPO176"错误提示,指出当交易类型(TType)与业务交易(Business Transaction)的"关联公司过账"(Post to Affiliated Company)标志不一致时,系统会拒绝过账。作者详细说明了该标志的作用机制,并提供了四种解决方案:修正交易类型使用、匹配正确的业务交易、调整系统配置或建立映射关系。文章还通过实际案例展示了配置错误对集团合并报表的影响,并附带了用于检查配置一致性的ABAP脚本。该错误通常

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 392

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Fastjson 使用指南

1 定义import com/**// 序列化, // log.info("serializer : [{}]" , serializer);// 数据源 // log.info("object : [{}]" , object);// 字段值 // log.info("fieldName : [{}]" , fieldName);// 字段名称 // log.info("fieldType : [{}]" , fieldType);

极客鼠之家 1104

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

再见 Fastjson,Fastjson 2 正式发布,性能炸裂…

1. FASTJSON 2.0介绍 FASTJSON 2.0是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库,同一套API支持JSON/JSONB两种协议,JSONPath是一等公民,支持全量解析和部分解析,支持Java服务端、客户端Android、大数据场景。 FASJTONS2代码 https://github.com/alibaba/fastjson2/releases/tag/2.0.1 JSONB格式文档 https://github.com/ali

qwer123451234123的博客 8988

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Fastjson

Fastjson是一个高性能的Java JSON库,由阿里巴巴集团开发和维护。Fastjson提供了一种简单而强大的方式来处理JSON数据,包括序列化、反序列化和操作JSON对象。它利用Java自带的反射机制来解析JSON字符串,可以将JSON字符串转换成Java对象,或者将Java对象转换成JSON字符串。注意事项安全性问题:尽管Fastjson在性能上表现出色,但在处理JSON数据时仍需要注意安全性问题。特别是其AutoType功能的安全性问题较为突出,因此在使用时需要谨慎。

刘皇叔说Java的博客 2956

java fastjson2 解析JSON用法解析

你可以为Fastjson2设置自定义的日期格式,通过配置。// 设置自定义日期格式 SerializeConfig config = new SerializeConfig();// 将日期对象转换为 JSON 字符串 String jsonString = JSON . toJSONString(date , config);// 输出: 2025-01-13 14:30:00 } }

cheng_ji的专栏 2329

fastjson2的时间序列化使用指南

本文主要探讨了 fastjson2的时间序列化和反序列化的简单使用,并且给出了代码示例。

pzzhao的博客 3156

FASTJSON 2.0 新版本

FASTJSON 2.0是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库,同一套API支持JSON/JSONB两种协议,JSONPath是一等公民,支持全量解析和部分解析,支持Java服务端、客户端Android、大数据场景。

Dily_Su的博客 9948
上一篇: Fastjson2 全面使用指南(Java后端开发者版)
下一篇: FastJSON2 完全使用指南(Java 后端开发实战版)
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值