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

快速学习和掌握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.xdnf.cn/news/19401.html

相关文章:

  • AI + 行业渗透率报告:医疗诊断、工业质检领域已进入规模化落地阶段
  • GD32入门到实战20--定时器
  • 【LeetCode】大厂面试算法真题回忆(122) —— 篮球比赛
  • react性能优化有哪些
  • SSR降级CSR:高可用容灾方案详解
  • Android中handler机制
  • 【Android】JSONObject和Gson的使用
  • HTTP的概念、原理、工作机制、数据格式和REST
  • 《C++——makefile》
  • 三重积分的性质
  • 【MATLAB绘图进阶教程】(2-6)动态绘图制作详解与例程,包括drawnow、pause、getframe、video write等命令
  • 机器学习时间序列算法进行随机划分数据是不合适的!
  • Dify1.8.0最新版本安装教程:Ubuntu25.04系统本地化安装部署Dify详细教程
  • 移动零,leetCode热题100,C++实现
  • IP-Guard支持修改安全区域密级文字和密级级数
  • 嵌入式学习日记(38)HTTP
  • Java学习笔记-多线程基础
  • Kafka 4.0 生产者配置全解析与实战调优
  • Go语言流式输出实战:构建高性能实时应用
  • 数据结构(力扣刷题)
  • 蜂窝通信模组OpenCPU的介绍
  • REST-assured获取响应数据详解
  • 手写链路追踪优化-自动全局追踪代替局部手动追踪
  • 做一个实用的节假日工具
  • Java面试-spring boot框架
  • 98、23种设计模式之代理模式(7/23)
  • 【SpringMVC】SSM框架【二】——SpringMVC超详细
  • ModuleNotFoundError: No module named ‘cairosvg‘
  • 浔川社团阅读量破历史记录
  • 得物25年春招-安卓部分编程题