Jackson 主要由以下几个包组成
1. Jackson Databind 数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API
2. Jackson Core 核心包,提供基于"流模式"解析的相关 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json
3. Jackson Annotations 注解包,提供标准注解功能
该模块增加了对Kotlin类和数据类的序列化/反序列化的支持。
Jackson的附加模块,用于支持Kotlin语言,特别是方法/构造函数参数名称的自省,而无需添加显式的属性名称注释。
该模块增加了对Kotlin类和数据类的序列化/反序列化的支持。以前,必须在Kotlin对象上存在默认构造函数,以便Jackson可以反序列化到该对象中。
使用此模块,可以自动使用单个构造函数类,还支持具有辅助构造函数或静态工厂的类。
databind.ObjectMapper
是 Jackson 提供序列化和反序列化的主要的类, 其继承关系 public class ObjectMapper extends ObjectCodec implements Versioned
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.SerializationFeature
data class User(val name: String = "Unknown", val age: Int = 0)
var mapper = ObjectMapper()
fun main(args: Array<String>) {
usage()
mapper.enable(SerializationFeature.INDENT_OUTPUT) // 应用缩进, 增强可读性
usage()
}
fun usage() {
var json = """{"name":"诸葛孔明"}"""
val syokaku = mapper.readValue(json, User::class.java)
println("反序列化 $json ->\n$syokaku")
val ryubi = User("刘备", 38)
json = mapper.writeValueAsString(ryubi)
println("序列化 $ryubi ->\n$json")
}
/*
反序列化 {"name":"诸葛孔明"} ->
User(name=诸葛孔明, age=0)
序列化 User(name=刘备, age=38) ->
{"name":"刘备","age":38}
反序列化 {"name":"诸葛孔明"} ->
User(name=诸葛孔明, age=0)
序列化 User(name=刘备, age=38) ->
{
"name" : "刘备",
"age" : 38
}
*/
原文:https://www.cnblogs.com/develon/p/11670924.html