Jackson通过反射将Json转化为java对象

Jackson的功能比较强大,我们这里主要使用Data Binding的方式,来看看如何使用反射将json转化为java bean,先加入如下依赖:

f0c92aff8e935c6233ebf4d829f24d401ba.jpg

Jackson 的核心模块由三部分组成。

  • jackson-core,核心包,提供基于"流模式"解析的相关 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。

  • jackson-annotations,注解包,提供标准注解功能;

  • jackson-databind ,数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API。

然后我们就可以写个demo看看:

ea55db40eebf43f1aca57b70d9441312c1b.jpg

输出:

432483d554bbef91bb32470d011292d43cd.jpg

入参都是类似的,传入json字符串和需要转化为的class,然后看看里面的方法是怎么处理的,之前还有很多预处理的方法,直接跳过吧,主要看看里面的解析的。先用createUsingDefault(DeserializationContext ctxt)返回一个使用默认构造方法创建的对象。

c3217c5b0545ae276b77ed8abb65b4f5e44.jpg

fbf4855ccaaab5980b0a24227372f05bb74.jpg

这里对于json的处理都放在JsonParser中,这里获取相应的类中的变量,然后使用deserializeAndSet方法设置值,现在觉得反射真是一个好东西呀,不然都不好处理,尤其是不知道都是什么类对象的情况,当然这里只是简单类对象的情况,复杂的后续再看看。

dfabb6804deb7f0d8be142e31c97379db21.jpg

这里最后调用的_setter.invoke(instance, value)来设置变量值。


猜你喜欢

转载自blog.51cto.com/14009535/2382627