jackson 学习之一:基本信息
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
关于 jackson
本文是《jackson 学习》系列的第一篇,先来一起了解 jackson:
jackson 的 github 地址:https://github.com/FasterXML/jackson
按照官网所述,jackson 是 java 技术栈内最好的 JSON 解析工具(best JSON parser for Java);
除了 JSON 解析,jackson 还是个数据处理工具集:基于流的解析库和生成库、数据绑定、数据格式化模块(Avro、XML、Protobuf、YAML 等);
版本信息
jackson 共有 1.x 和 2.x 两个版本系列,其中 1.x 已废弃不再有版本发布,2.x 是活跃版本;
1.x 和 2.x 不兼容,如果您的代码已经使用了 1.x,现在想改用 2.x,您就必须修改使用 jackson 的那部分代码;
虽然不兼容,但是 1.x 和 2.x 不冲突,您的项目可以在 pom.xml 中同时依赖这两个版本,假设您原有三处代码调用了 1.x 的 API,现在可以把一处改成 2.x 的,另外两处维持不变,这个特性适合将项目逐步从 1.x 升级到 2.x(This is by design and was chosen as the strategy to allow smoother migration from 1.x to 2.x.);
2.x 系列版本中,有的版本已关闭(除非 bug 或者安全问题才会发布新的小版本),有的版本还处于活跃状态,如下图,您可以在这个地址获取最新情况:https://github.com/FasterXML/jackson/wiki/Jackson-Releases
三个核心模块
jackson 有三个核心模块,如下,括号内是 maven 的 artifactId:
Streaming(jackson-core):低阶 API 库,提供流式解析工具 JsonParser,流式生成工具 JsonGenerator;
Annotations(jackson-annotations):jackson 注解;
Databind (jackson-databind):基于 java 对象的序列化、反序列化能力,需要前面两个模块的支持才能实现;
低阶 API 库的作用
当我们用 jackson 做 JSON 操作时,常用的是 Databind 模块的 ObjectMapper 类,对处于核心位置的 jackson-core 反倒是很少直接用到,那么该模块有什么作用呢?
如下图,BeanSerializer 是 jackson-databind 的功能类,其 serialize 方法负责将 java 对象转为 JSON,方法中的处理逻辑就是调用 JsonGenerator 的 API,而 JsonGenerator 就是 jackson-core 中负责序列化的主要功能类:
可见 Databind 模块的 ObjectMapper 类提供给我们的 API,其底层操作是基于 jackson-core 实现的;
至此,我们对 jackson 已有了基本了解,接下来的文章会开始一系列的实战,通过实战来掌握和理解这套优秀的工具;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/e951005ec1aab78bd9f992e0c】。文章转载请联系作者。
评论