参考:http://www.cnblogs.com/kakag/p/5054772.html
http://blog.csdn.net/java_huashan/article/details/46375857
依赖:
1 | <dependency> |
Jackson 主要有三部分组成,除了三个模块之间存在依赖,不依赖任何外部 jar 包。
三个模块及artifactId:jackson-core、jackson-annotations、jackson-databind。
提供了三种使用方式:
Streaming API
: 其他两种方式都依赖于它而实现,如果要从底层细粒度控制 json 的解析生成,可以使用这种方式;Tree Model
: 通过基于内存的树形结构来描述 json 数据。json 结构树由 JsonNode 组成。不需要绑定任何类和实体,可以方便的对 JsonNode 来进行操作。Data Binding
: 最常用的方式,基于属性的 get 和 set方法以及注解来实现 JavaBean 和 json 的互转,底层实现还是 Streaming API.
我目前实际遇到的:
第一种不长使用。
第二种在返回的json很大层次很深但是你只需要某几层的某几个数据时比较适合使用。
第三种就是常规的使用,经常使用。可以把得到的json直接转成相应的类别。
json有很多的属性可以设置,具体可以看上面参考链接里的第一个链接。
比如下面第三种时例子里的mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
;
jsonString和自定义类转换时,当自定义类中有比jsonString少的属性时,设置了上面的值就不会报错,可以继续自动转换;可是没有设置时就会报错。
自定义类属性比jsonString多时jackson本身就不会报错。
第一种不再细说,因为不长使用。
第二种简单例子:
1 | #Jackson提供一个树节点被称为"JsonNode",ObjectMapper提供方法来读json作为树的JsonNode根节点 |
第三种:
jsonString和对应类可直接转换。
1 | import com.facebook.presto.jdbc.internal.guava.base.Preconditions; |
json中出现很多\时,是因为多层序列化,有对象被多次序列化。一个对象A序列化后作为string给另一个对象B,B再序列化,之后A就会出现\,如果再多一层,引号前面会有三个\\。
json反序列化时需要转化成对象或者map。