使用Fastjson进行JSON生成与解析的新手指南

 更新时间:2025年04月07日 09:13:04   作者:五行星辰  
Fastjson是阿里巴巴开源的高性能 JSON 库,适用于 Java 对象的序列化和反序列化,本文将详细介绍一下如何使用Fastjson进行json的生成与解析吧

Fastjson 是阿里巴巴开源的高性能 JSON 库,适用于 Java 对象的序列化(生成 JSON)和反序列化(解析 JSON)。以下是详细使用指南:

1. 添加依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.39</version> <!-- 使用最新安全版本 -->
</dependency>

2. 基础用法

2.1 对象转 JSON(序列化)

import com.alibaba.fastjson.JSON;

User user = new User("张三", 25);
String json = JSON.toJSONString(user);
// 输出:{"name":"张三","age":25}

2.2 JSON 转对象(反序列化)

String json = "{\"name\":\"李四\",\"age\":30}";
User user = JSON.parseObject(json, User.class);

3. 常用注解

3.1 字段控制

public class User {
    @JSONField(name = "user_name")  // 自定义字段名
    private String name;

    @JSONField(serialize = false)   // 忽略字段
    private String password;

    @JSONField(format = "yyyy-MM-dd HH:mm:ss")  // 日期格式化
    private Date createTime;
}

3.2 序列化顺序

@JSONType(orders = {"id", "name", "age"}) // 指定字段顺序
public class User {
    private Long id;
    private String name;
    private Integer age;
}

4. 高级配置

4.1 全局配置

// 序列化配置
SerializeConfig config = new SerializeConfig();
config.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd"));

// 反序列化配置
ParserConfig parserConfig = new ParserConfig();
parserConfig.setSafeMode(true); // 启用安全模式防漏洞

String json = JSON.toJSONString(obj, config);
User user = JSON.parseObject(json, User.class, parserConfig);

4.2 自定义序列化/反序列化

public class MoneySerializer implements ObjectSerializer {
    @Override
    public void write(
        JSONSerializer serializer, 
        Object value, 
        Object fieldName, 
        Type fieldType, 
        int features
    ) {
        BigDecimal amount = (BigDecimal) value;
        serializer.write(amount.setScale(2) + "元");
    }
}

​​​​​​​// 注册自定义序列化器
SerializeConfig.getGlobalInstance().put(BigDecimal.class, new MoneySerializer());

5. 处理复杂场景

5.1 泛型集合

// 序列化
List<User> users = Arrays.asList(new User("张三"), new User("李四"));
String json = JSON.toJSONString(users);

// 反序列化
List<User> parsedUsers = JSON.parseArray(json, User.class);

5.2 循环引用处理

// 禁用循环检测(默认开启,可能导致StackOverflow)
String json = JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);

5.3 忽略未知字段

User user = JSON.parseObject(json, User.class, Feature.IgnoreNotMatch);

6. 性能优化

6.1 禁用特性检查

// 提升序列化速度(牺牲严格校验)
String json = JSON.toJSONString(obj, 
    SerializerFeature.WriteMapNullValue, 
    SerializerFeature.DisableCheckSpecialChar
);

6.2 使用JSONWriter处理大文件

try (JSONWriter writer = new JSONWriter(new FileWriter("large.json"))) {
    writer.startArray();
    for (User user : users) {
        writer.writeValue(user);
    }
    writer.endArray();
}

7. 安全防护

7.1 启用安全模式

ParserConfig.getGlobalInstance().setSafeMode(true); // 禁止反序列化任意类

7.2 白名单控制

// 只允许反序列化指定类
ParserConfig.getGlobalInstance().addAccept("com.example.model.");

8. 与 Spring 集成

替换 Spring MVC 默认 JSON 处理器

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        converter.setFastJsonConfig(fastJsonConfig());
        converters.add(0, converter);
    }

    private FastJsonConfig fastJsonConfig() {
        FastJsonConfig config = new FastJsonConfig();
        config.setSerializerFeatures(SerializerFeature.PrettyFormat);
        config.setDateFormat("yyyy-MM-dd HH:mm:ss");
        return config;
    }
}

9. 常见问题解决

9.1 日期格式不匹配

// 全局配置日期格式
JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";
String json = JSON.toJSONString(new Date()); // 输出 "2023-01-01"

9.2 字段名大小写问题

// 驼峰转下划线命名
Model model = new Model();
model.setUserName("test");
String json = JSON.toJSONString(model, SerializerFeature.UseSnakeCase);
// 输出 {"user_name":"test"}

9.3 处理枚举类型

public enum Status {
    @JSONField(name = "OK")  // 自定义枚举值名称
    SUCCESS,
    @JSONField(name = "ERR")
    FAILED
}

String json = JSON.toJSONString(Status.SUCCESS); // 输出 "OK"

10. 性能对比建议

场景推荐方案
高并发接口Fastjson 默认配置 + 安全模式
复杂嵌套对象禁用循环引用检测 + 缓存配置
处理超大 JSON 文件使用 JSONReader/JSONWriter
需要严格类型安全启用安全模式 + 白名单控制

11.注意事项

  • 版本安全:始终使用官方最新版本(Maven 仓库),避免历史漏洞。
  • 数据来源:反序列化外部输入时,务必启用安全模式或白名单。
  • 线程安全:ParserConfig 和 SerializeConfig 建议全局单例。
  • 兼容性:Fastjson 与其他 JSON 库混用时,注意注解冲突问题。

通过合理配置,Fastjson 能以接近极限的性能处理 JSON 数据,但需在功能、安全、性能之间做好权衡。

到此这篇关于使用Fastjson进行JSON生成与解析的新手指南的文章就介绍到这了,更多相关Fastjson处理JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java嵌套for循环优化方案分享

    Java嵌套for循环优化方案分享

    介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通过这些方法,可以显著提升程序的执行效率,文章还以动态规划优化示例——最长递增子序列
    2025-03-03
  • Java实现在线考试系统与设计(学生功能)

    Java实现在线考试系统与设计(学生功能)

    这篇文章主要介绍了Java实现在线考试系统与设计(学生功能),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • IDEA无法识别SpringBoot项目的简单解决办法

    IDEA无法识别SpringBoot项目的简单解决办法

    今天使用idea的时候,遇到idea无法启动springboot,所以这篇文章主要给大家介绍了关于IDEA无法识别SpringBoot项目的简单解决办法,需要的朋友可以参考下
    2023-08-08
  • Java轻松掌握面向对象的三大特性封装与继承和多态

    Java轻松掌握面向对象的三大特性封装与继承和多态

    本文主要讲述的是面向对象的三大特性:封装,继承,多态,内容含括从封装到继承再到多态的所有重点内容以及使用细节和注意事项,内容有点长,请大家耐心看完
    2022-05-05
  • JDK SPI机制以及自定义SPI类加载问题

    JDK SPI机制以及自定义SPI类加载问题

    这篇文章主要介绍了JDK SPI机制以及自定义SPI类加载问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • @RequestBody获取不到参数的问题

    @RequestBody获取不到参数的问题

    这篇文章主要介绍了@RequestBody获取不到参数的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 启动异常invalid constant type:15的解决方案

    启动异常invalid constant type:15的解决方案

    今天小编就为大家分享一篇关于启动异常invalid constant type:15的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 一文带你掌握Java ImageIO类

    一文带你掌握Java ImageIO类

    Java中的ImageIO类是Java标准库中用于处理图像的一个非常常用的 API,它提供了读取和写入多种常见图像格式的功能,如JPEG、PNG、BMP、GIF等,本文将全面详细地介绍Java中的ImageIO类的使用方法,需要的朋友可以参考下
    2023-05-05
  • springboot+vue实现登录功能

    springboot+vue实现登录功能

    这篇文章主要为大家详细介绍了springboot+vue实现登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • spring整合struts2过程详解

    spring整合struts2过程详解

    这篇文章主要介绍了spring整合struts2过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01

最新评论