当前位置: 首页 > news >正文

快速学习和掌握Jackson 、Gson、Fastjson

目录

  • 前言
  • Jackson
    • 核心功能与基本使用
    • 高级特性
  • Gson
    • 基本用法
  • Fastjson
    • 基本使用
  • 选用建议

前言

Json数据格式目前已经是前后端交互的主流数据传输格式,我们在日常的Java开发项目中也经常需要在程序中处理json数据,包括序列化以及反序列化,甚至直接操作JSON数据。Spring Boot 提供了对多种 JSON 库的良好支持,其中Jackson 、Gson、Fastjson 日常开发中我们用的比较多,每个库都有其特点和适用场景。

Jackson

  • Jackson是Java生态中最流行且功能最强大的JSON处理库,具备​​高性能​​、​​灵活性​​和​​丰富的功能等特点,是Spring等主流框架的默认JSON处理器,在boot项目中,是通过spring-boot-starter-web 依赖间接引入

核心功能与基本使用

  • Jackson的核心是ObjectMapper类,它负责JSON与Java对象之间的转换工作:
// 初始化ObjectMapper
ObjectMapper mapper = new ObjectMapper();// 配置常用选项
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略未知属性,不设置这个,如果JSON数据包含某个属性,Java类没有这个属性,就会反序列化失败
mapper.setSerializationInclusion(Include.NON_NULL); // 忽略null值// 对象序列化为JSON字符串
User user = new User("John", 30);
String json = mapper.writeValueAsString(user);// JSON字符串反序列化为对象
User parsedUser = mapper.readValue(json, User.class);

高级特性

  • Jackson提供了丰富的​​注解​​用于控制序列化/反序列化行为:
// 使用注解控制序列化
@JsonInclude(Include.NON_NULL)  // 忽略null字段
@JsonPropertyOrder({"name", "id"}) // 指定属性顺序
public class User {@JsonProperty("user_id") // 自定义JSON字段名private String userId;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 日期格式化private LocalDateTime createTime;@JsonIgnore // 忽略该字段private String password;
}
  • 对于​​复杂类型和泛型​​,Jackson使用TypeReference处理:
// 处理泛型集合
String jsonList = "[{...}, {...}]";
List<User> users = mapper.readValue(jsonList, new TypeReference<List<User>>() {});// 复杂嵌套结构
TypeReference<Map<String, List<Order>>> complexType = new TypeReference<>() {};
Map<String, List<Order>> result = mapper.readValue(json, complexType);
  • 我们也可以通过Jackson的​​树模型API​​(JsonNode)动态操作JSON原数据,其中ObjectNodeJsonNode 是 Jackson 库中处理 JSON 数据的两个核心类
  • JsonNode使抽象基类,ObjectNode是JsonNode的继承子类
  • JsonNode不可变,只能获取,ObjectNode可以改变JSON数据值,提供了 put, remove, set 等修改方法
// 使用树模型动态操作JSON
JsonNode rootNode = mapper.readTree(jsonString);
String name = rootNode.get("name").asText(); // 提取值
int age = rootNode.get("age").asInt();// 修改JSON节点
ObjectNode objectNode = (ObjectNode) rootNode;
objectNode.put("newField", "newValue");
String modifiedJson = objectNode.toString();

Gson

  • Gson是Google开发的一个​​轻量级​​、​​易用​​的JSON库,以其简单的API和零依赖特性而受到欢迎

基本用法

  • Gson的核心是Gson类,它负责JSON与Java对象之间的转换工作
// 创建Gson实例
Gson gson = new Gson();// 对象序列化为JSON
User user = new User("John", 30);
String json = gson.toJson(user);// JSON反序列化为对象
User parsedUser = gson.fromJson(json, User.class);
  • Gson对​​复杂对象和嵌套结构​​的处理也很简便:
// 处理集合类型
String jsonArray = "[{...}, {...}]";
List<User> users = gson.fromJson(jsonArray, new TypeToken<List<User>>(){}.getType());
  • Gson的​​注解系统​​虽然比Jackson简单,但覆盖了常见需求:
public class User {@SerializedName("full_name") // JSON字段名映射private String name;@Expose(serialize = false, deserialize = true) // 控制序列化/反序列化行为private String password;@Since(1.1) // 版本控制private String email;
}

Fastjson

  • Fastjson是阿里巴巴开发的​​高性能​​JSON库,号称Java领域中最快的JSON库

基本使用

Fastjson的核心功能通过JSON类提供:

// 对象序列化为JSON字符串
User user = new User("John", 30);
String jsonString = JSON.toJSONString(user);// 格式化输出
String prettyJson = JSON.toJSONString(user, true);// JSON字符串反序列化为对象
User parsedUser = JSON.parseObject(jsonString, User.class);// 处理集合
List<User> userList = JSON.parseArray(jsonArrayString, User.class);

-Fastjson提供了方便的​​JSON对象模型​​:

// JSON字符串和JSONObject 互相转换,通过JSONObject可以很方便操作JSON数据
JSONObject jo = JSON.parseObject(jsonString);
String jsonString = JSON.toJSONString(jo);
// 直接操作JSON对象
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "John");
jsonObject.put("age", 30);// 获取值
String name = jsonObject.getString("name");
int age = jsonObject.getIntValue("age");// 判断键是否存在
boolean hasKey = jsonObject.containsKey("name");
  • Fastjson也支持通过注解​​自定义序列化​​:
// 使用@JSONField注解配置序列化
public class User {@JSONField(name = "user_name", ordinal = 1) // ordinal属性作用是控制该字段在序列化字段的顺序private String name;@JSONField(serialize = false) // 不序列化此字段private String password;@JSONField(format = "yyyy-MM-dd HH:mm:ss")private Date createTime;
}

选用建议

  • 对于大多数应用,三个库的性能差异可能并不明显。但在​​大数据量和高并发场景​​下:
  • Fastjson通常表现出最快的序列化/反序列化速度
  • Jackson在高并发下表现稳定,适合企业级应用
  • Gson在中小数据量下表现良好,满足大部分常规需求
http://www.dtcms.com/a/358913.html

相关文章:

  • React Native基本用法
  • 大语言模型生成的“超龄劳动者权益保障制度系统化完善建议(修订版)”
  • 下一波红利:用 #AI编程 闯入小游戏赛道,#看广告变现 模式正在崛起!
  • I2C的类比水池和大海
  • 【前端教程】DOM 操作入门专栏:从基础到实战
  • JS之刷刷
  • Langflow核心技术学习笔记(新)
  • LangChain.js 实战与原理:用 LCEL 构建可维护的 RAG / Agent 系统(含 4 套 30+ 行代码)
  • 揭开智能体架构面纱:90% 属软件工程,10% 为 AI 技术
  • Python数据分析:在Python中,reindex和set_index以及reset_index最本质的区别是什么?
  • B树与B+树的原理区别应用
  • Python 的 argparse 模块中,add_argument 方法的 nargs 参数
  • Ubuntu系统下交叉编译Android的X264库
  • hello算法笔记 01
  • Jedis、Lettuce、Redisson 技术选型对比
  • 下载 | Win11 23H2正式版最新原版ISO系统映像 (22631.5840、多合一版本)-修复系统问题
  • LangGraph 深度解析(二):掌握 LangGraph 函数式 API 的状态化 AI 工作流
  • openEuler2403安装部署Redis8
  • JavaScript之性能优化
  • HiFi-GAN模型代码分析
  • txt2las批量测井txt文件转las
  • 【C++】类和对象3
  • 【学Python自动化】 1. Python 安装与配置完全指南 (Windows)
  • 微论-突触的作用赋能思考(可能是下一代人工智能架构的启发式理论)
  • fastdds qos:LifespanQosPolicy
  • 2025年- H101-Lc209--1979.找出数组的最大公约数(gcd最大公约数)--Java版
  • STM32G474 IAP 双bank升级的坑
  • git的三种分区与分支的关系
  • Pomian语言处理器研发笔记(二):使用组合模式定义表示程序结构的语法树
  • for in+逻辑表达式 生成迭代对象,最后转化为列表 ——注意list是生成器转化为列表,但[生成器]得到的就是一个列表,其中包含一个生成器元素