
Jackson用法详解
发布日期:2021-05-14 17:36:06
浏览次数:20
分类:精选文章
本文共 3271 字,大约阅读时间需要 10 分钟。
Jackson解析工具简介与使用指南
一、Jackson简介
Jackson 是当前流行的用于 JSON 序列化和反序列化的开源 Java 框架。自 2017 年 8 月起,由 Original Jackson 开发团队维护,版本号从 1.x 跳转至 2.x。该框架速度快、内存占用低,成为 Spring MVC 的默认 JSON 解析工具。
核心模块说明
Jackson 核心包含三个主要模块:
jackson-core
提供最低层的解析和生成逻辑,包括JsonParser
和 JsonGenerator
。 jackson-annotations
提供标准注解功能,用于自定义 JSON 解析和序列化规则。jackson-databind
提供基于对象绑定的反序列化和序列化功能,支持对象模型(ObjectMapper
)和树模型(JsonNode
)。 其余功能扩展在其他相关模块中支持。
下载安装
使用 Maven 的项目示例:
com.fasterxml.jackson.core jackson-core 2.9.6 com.fasterxml.jackson.core jackson-databind 2.9.6
安装完成后,通过 ObjectMapper
类实现 JSON 解析和生成功能。
二、ObjectMapper 使用说明
1. 从 JSON 解析 Java 对象
示例代码
ObjectMapper objectMapper = new ObjectMapper();// 从文件读取String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";Car car = objectMapper.readValue(new File("data/car.json"), Car.class);// 或通过输入流读取InputStream inputStream = new FileInputStream("data/car.json");car = objectMapper.readValue(inputStream, Car.class);
直接使用
默认行为:将 JSON 字段映射到 Java 对象属性,默认忽略未知字段。
注意:若需要允许未知字段保留可通过 configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
设置。
2. Java 对象序列化为 JSON
示例代码
ObjectMapper objectMapper = new ObjectMapper();Car car = new Car();car.setBrand("BMW");car.setDoors(4);// 生成 JSON 至文件输出流objectMapper.writeValue(new FileOutputStream("data/output.json"), car);// 或生成 JSON 字符串String jsonStr = objectMapper.writeValueAsString(car);
注意事项
- 自定义序列化:可以实现自定义序列化器,再在
ObjectMapper
注册使用。 - 日期处理:默认序列化
Date
为 timestamp 毫秒数,可配置使用格式化字符串。
3. Jackson 树模型
逐级解析与构建
通过 JsonNode
类型实现灵活的 JSON 树操作:
// 从 JSON 解析为树模型JsonNode rootNode = objectMapper.readTree(jsonStr);// 树模型操作示例JsonNode brandNode = rootNode.get("brand");String brand = brandNode.asText();System.out.println("Brand: " + brand);JsonNode arrayNode = rootNode.get("owners");JsonNode firstOwner = arrayNode.get(0);System.out.println("First owner: " + firstOwner.asText());
4.日期转换
JSON 到 Date
默认将 JSON 中的日期字段解析为 long
类型,具体时间以 moment epoxy Unix 时间计算。
// 创建 JSON 例如String dateJson = "{\"time\": 1234567890}";// 反序列化为 DateDate date = objectMapper.readValue(dateJson, Date.class);System.out.println("Time: " + date.getTime());
####自定义日期格式
通过设置 DateFormat
并传递给 ObjectMapper
:
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));// 生成自定义日期字符串String formattedDate = objectMapper.writeValueAsString(date);
三、注解应用
1. 常用注解分类
注解 | 作用 |
---|---|
@JsonProperty | 定义字段与 JSON 名称映射关系,支持 alias |
@JsonFormat | 定义字段的格式输出 |
@JsonPropertyOrder | 定义属性在 JSON 中的排序顺序 |
@JsonCreator | 指定构造函数用于反序列化 |
@JacksonInject | 注入值到对象属性 |
2. 示例应用
@JsonCreator
用于定制反序列化行为:
public class Person { public Person(@JsonProperty("id") Long id, @JsonProperty("name") String name) { this.id = id; this.name = name; } private final Long id; private final String name;}
@JsonRawValue
用于保留原始 JSON 格式:
public class Amount { private Long value; @JsonRawValue public Long getValue() { return value; }}
四、反编译工具
通过 Jackson 模型,实现结构化数据的解析与转换,适用于复杂格式数据处理。
核心工具
工具 | 作用 |
---|---|
JsonParser | JSON 解析器 |
JsonGenerator | JSON 生命器 |
ObjectMapper | JSON 对象映射 |
总结:
Jackson 为 Spring MVC 提供便捷的 JSON 数据处理能力,适合开发高效的 JSON服务。通过合理配置和注解,用户可以定制 JSON 处理流程,提升开发效率。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月24日 03时19分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
小程序提交新数据后如何返回上一页并刷新数据?
2019-03-11
qt c++实现的ai贪吃蛇吃满屏幕,超详细!(二)ai的具体实现
2019-03-11
linux 查看log日志相关命令
2019-03-11
div 实现光标悬停变成手型
2019-03-11
layer.confirm 无效
2019-03-11
Java 回调机制
2019-03-11
pycharm使用(新建工程、字体修改、调试)
2019-03-11
什么是Numpy、Numpy教程
2019-03-11
Python学习笔记——元组
2019-03-11
异常声音检测
2019-03-11
无法打开文件“opencv_world330d.lib”的解决办法
2019-03-11
maven项目通过Eclipse上传到svn上面,再导入到本地出现指定的类找不到的问题
2019-03-11
maven 项目部署到tomcat下 没有class文件
2019-03-11
算法训练 未名湖边的烦恼(递归,递推)
2019-03-11
算法训练 完数(循环,数学知识)
2019-03-11
什么是接口
2019-03-11
iview组件库中,Form组件里的Input,无法正确绑定on-enter事件
2019-03-11