小吐槽下,官网文档有点混乱。这里整合了两个比较好的教程,依照流程走下去,会掌握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; ;甚至通过大量的数据类型(datatype)模块去支持被广泛使用的数据类型 如Guava, Joda, PCollections等等
实际使用中常包含的模块有
三个核心包(core packages):streaming,databind,annotations;
数据格式化库(data format libraries);
数据类型库(data type libraries)
JAX-RS provider 支持JAS-RS接口格式,解析和生成json类型
各种其他模块
Jackson 项目设计模块
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
支持 JAX-RS
数据格式化模块
jvm 语言的模块
Kotlin
Scala
支持 Schemas的插件
schemas本身是一个xml文件可以取代DTD来提供格式校验
比如ant编译配置json文件提供格式校验
其他稳定模块
教程
使用
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
...
2.9.8
com.fasterxml.jackson.core
jackson-core
${jackson-2-version}
com.fasterxml.jackson.core
jackson-annotations
${jackson-2-version}
com.fasterxml.jackson.core
jackson-databind
${jackson-2-version}
...
DEMO
三种方式
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,byteArray
ObjectMapper会缓存序列化与反序列化的对象,所以公用一个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文件流,并逐步解析
注解