b jackson教程
—> go to 总目录
文章目录
- 描述
- JackSON 项目设计模块
- 教程
- 使用方式
- MAVEN依赖
- DEMO
- generator
- `方式1` Java2Json_ObjectMapper.java
- `方式2` Java2Json_TreeModel.java
- `方式3` Java2Json_Streaming.java
- prase
- `方式1` Java2Json_ObjectMapper.java
- `方式2` Java2Json_TreeModel.java
- `方式3` Json2Java_Streaming.java
- 注解
官网: https://github.com/FasterXML/jackson
描述
java流行的JSON library。Jackson是一系列java数据处理工具(data-processing tools),包括流式的json解析/生成库(streaming JSON parser/generator library),数据匹配绑定库(data-binding library:POJOS和JSON相互转化),和
额外的模块去处理数据,支持如下格式的编码:Avro, BSON, CBOR, CSV, Smile, (Java) Properties, Protobuf, XML or YAML; ;甚至通过大量的数据格式模块去支持被广泛使用的数据类型 如Guava, Joda, PCollections等等
实际使用中常包含的模块有
- 三个核心包(core packages):
streaming,databind,annotations; - 数据格式化库(data format libraries);
- 数据类型库(data type libraries)
- JAX-RS provider 支持JAS-RS接口格式,解析和生成json类型
- 各种其他模块
JackSON 项目设计模块
-
核心的模块
Streaming – jackson-core :low-level的streaming API和 有关JSON方法具体的实现
Annotations – jackson-annotations :标准的Jackson 注解
Databind – jackson-databind :实现数据绑定(和对象序列化),依赖 jackson-core和jackson-annotations packages实现 -
第三方数据类型模块 Third-party datatype modules
详见官方的链接 datatype
- 支持 JAX-RS
详见官方链接
- 数据格式化模块
详见官方链接 dataformat
- jvm 语言的模块
Kotlin
Scala
- 支持 Schemas的插件
schemas本身是一个xml文件可以取代DTD来提供格式校验
比如ant编译配置json文件提供格式校验
- 其他稳定模块
- 详见官方链接
- Jackson jr 专门为移动端准备的简化jackson
教程
jackson-docs
https://github.com/FasterXML/jackson-docs
StudyTrails 告诉你jackson是什么
http://www.studytrails.com/java/json/java-jackson-introduction/
使用方式
http://www.studytrails.com/java/json/java-jackson-introduction/
java创建json
- 从java对象创建json
- 从jsonNode树创建json
- 创建一个json流
解析JSON
- Streaming - 用JsonParser去解析JSON stream。提供了JSON 的元素 作为符号(利用JsonGenerator 去生成有关String,Integer,boolean等类型的JSON)(
json streaming 流式计算,开销最低,读写最快) - Tree Traversing - 完整的JSON可以解析成JsonNode(
数模型Json文件在内存里以树形式表示 ObjectMapper构建JsonNode 节点树 最灵活) - Data Binding 绑定json到POJO对象,注解可以标记在POJO的属性和构造器上 (
数据绑定 JSON和POJO之间互相转化 使用ObjectMapper读写)
注解和序列化(Annotation and Serialization)
- List Serialization - 当type的是被保护的类型时,序列化List是比较困难的
- Annotation and Dynamic beans - 序列化未知的JSON属性到JAVA MAP中去
- Annotatin Filter - 使用data binding后,本该绑定的POJO properties 可以无视或过滤掉绑定内容,这些过滤器可以以注解形式被使用在POJO属性上,或者使用自定义filter
- Mix-in-Annotation - 被用来做POJO属性到JSON属性的映射以及去标记使用了data binding的构造器constructor。然而当POJO来自第三方,且不能被标记。Mix-in 可以为第三方的类标记注解
- Polymorphic Behaviour - 多态行为,如果一个JSON是来源于一个抽象类的具体实例,jackjon提供方式去创建具体的的子类
MAVEN依赖
从JackSon 项目设计模块来看,他是模块化(插件化的),核心的三个依赖(
core、databinding、annotation)是必需导入的。其余模块根据自己项目的需求导入。所以推荐使用的思路是:核心三模块—>了解jackson官方模块功能—>按需求导入其他模块
maven 配置
参考一: 官网 2013更新(太老)
Using Jackson2 with Maven
参考二: 简书上某作者的使用(比较清晰)
Jackson 快速入门
* 虽然是gradle配置,参考引入的包即可
参考三: 极简配置
可去MAVEN仓库查询最新版本
maven repository
...<properties><jackson-2-version>2.9.8jackson-2-version>properties>
<dependencies><dependency><groupId>com.fasterxml.jackson.coregroupId><artifactId>jackson-coreartifactId><version>${jackson-2-version}version>dependency><dependency><groupId>com.fasterxml.jackson.coregroupId><artifactId>jackson-annotationsartifactId><version>${jackson-2-version}version>dependency><dependency><groupId>com.fasterxml.jackson.coregroupId><artifactId>jackson-databindartifactId><version>${jackson-2-version}version>dependency>
dependencies>
...
DEMO
githup:https://github.com/EvilJoker/JavaDetail/tree/master/jackson/src
以下Demo基于 MAVEN参考三配置
java to json
三种方式
- ObjectMapper 类和JSON对应互相转换
- Tree Mode 直接构造一颗简单的树来生成JSON
- JSON Streaming
generator
方式1 Java2Json_ObjectMapper.java
jackson 可以让对象和JSON相互转化
内容:
普通类型到JSON:String
普通数组到JSON:String[]
集合列表到JSON:List
集合MAP到JSON:Map
类到JSON: artist.java
核心类:ObjectMapper
方式2 Java2Json_TreeModel.java
利用简单的树模型去生成json。这可能对当你不想为了生成JSON去专门编写一个类时有帮助。
生成一颗树你首先需要这么做:
- 创建
JsonNodeFactory类去生成节点nodes- 根据
JsonFactory类和输出方式来创建JsonGenerator类(生成器)- 创建
ObjectMapper类,然后使用JsonGenerator
和root node去生成JSON
方式3 Java2Json_Streaming.java
Jackson提供一个low-level的API去把JSON解析成Java。这个API为每个JSON对象提供token标记。例如JSON开始的
'{'是Parser(解析器)标记的第一个对象。key-value键值对则是新的对象。client端的代码可以使用这些标记(tokens)去获得JSON的属性值或者生成一个Java对象。low_level的API功能十分强大但需要一些代码编写。大多数示例中,Jackson树和数据绑定(tree and data-binding)的大小应该被明确指出。这个code中提供了两种示例:解析和生成。
核心类
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(new FileWriter(new File("albums.json"))) `绑定输出`
prase
方式1 Java2Json_ObjectMapper.java
Java开发者最长要处理的是
Java POJO。难道你不想让处理过程像一个黑盒一样,JSON从一边进然后POJO从一边出。这就是Jackson的data binding做的事情。最好的解释是通过一个示例。我们用一个music类做示例。它会提供一个API去获得albums对应的最新的JSON。我们将能够般json串读到Albums中去。这个Albums对象包含了一个Dataset。
如下介绍了java data binding 如何工作
- 第一步是创建
JAVA类- 拥有 JSON data数据。这个Albums包含了数组,字符串等数据- 创建一个
com.fasterxml.jackson.databind.ObjectMapper class。这个类把JSON映射到一个JAVA对象上去- 我们将会使用
readValue方法去读。我们从一个URL获取数据。除此之外还以从file、inputstream,string,byteArrayObjectMapper会缓存序列化与反序列化的对象,所以公用一个ObjectMapper将会十分有效- 如果你有一个
inputStream,可以直接使用Jackson 而不必去包装成InputStreamReader。
方式2 Java2Json_TreeModel.java
Jackson 提供了树节点类:
com.fasterxml.jackson.databind.JsonNode。而ObjectMapper 提供了一个方法去把JSON转化成Java tree模型。这种方式和DOM NODE和DOM Trees的关系雷系。这个示例提供两种方式从一个JSON串去构建出一棵树:直接从node获取;用Path去获取生成一颗树你首先需要这么做:
- 创建
JsonNodeFactory类去生成节点nodes- 根据
JsonFactory类和输出方式来创建JsonGenerator类(生成器)- 创建
ObjectMapper类,然后使用JsonGenerator
和root node去生成JSON
方式3 Json2Java_Streaming.java
stream 的 prase类。这个示例演示了从url资源获取json文件流,并逐步解析
注解
慎用注解,不易过复杂,过于复杂的注解使用会对代码的维护和阅读造成困扰。
以下是其他blog总结的常用注解
参考使用 :https://www.jianshu.com/p/1cd7cc9e94d7
教程:http://www.studytrails.com/java/json/java-jackson-data-binding-filters/
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
