使用jackson 如何把json字符串反序列化为list呢?
(list中是自定义对象)
先看下常规的反序列化:
@test
public void test_reserialize(){
string jsoninput = "{\"addrr\":{\"country\":\"中国\",\"state\":\"湖北省\",\"street\":\"清河\"},\"age\":25,\"hobby\":\"\",\"name\":\"黄威\"}";
objectmapper mapper = new objectmapper();
student student;
try {
student = mapper.readvalue(jsoninput, student.class);
system.out.println(student.getaddrr().getstreet());
system.out.println(student.getname());
} catch (exception e) {
e.printstacktrace();
}
}
运行结果:
序列化
public void test_004(){
list<teacher> list=new arraylist<teacher>();
teacher t=new teacher();
t.setid(2);
t.setname("雄鹰表");
t.settitle("aa");
list.add(t);
t=new teacher();
t.setid(3);
t.setname("陈定生");
t.settitle("bb");
t.setid(4);
t.setname("张阿勇");
t.settitle("cc");
string content;
content = mapper.writevalueasstring(list);
system.out.println(content);
} catch (jsongenerationexception e) {
} catch (jsonmappingexception e) {
} catch (ioexception e) {
运行结果:
[{“id”:2,”title”:”aa”,”name”:”雄鹰表”},{“id”:3,”title”:”bb”,”name”:”陈定生”},{“id”:4,”title”:”cc”,”name”:”张阿勇”}]
反序列化
把上述json字符串反序列化为list
代码如下:
public void test_006(){
string jsoninput="[{\"id\":2,\"title\":\"aa\",\"name\":\"雄鹰表\"},{\"id\":3,\"title\":\"bb\",\"name\":\"陈定生\"},{\"id\":4,\"title\":\"cc\",\"name\":\"张阿勇\"}]";
list student;
student = mapper.readvalue(jsoninput, list.class);
system.out.println(student.size());
运行时
没有达到预期效果,虽然反序列化成了list,但是并不是list<teacher>,而是list<hashmap>
如何解决这个问题呢?
解决方法:使用mapper.gettypefactory().constructparametrictype
/**
* 获取泛型的collection type
* @param collectionclass 泛型的collection
* @param elementclasses 元素类
* @return javatype java类型
* @since 1.0
*/
public static javatype getcollectiontype(objectmapper mapper,class<?> collectionclass, class<?>... elementclasses) {
return mapper.gettypefactory().constructparametrictype(collectionclass, elementclasses);
}
@test
student = mapper.readvalue(jsoninput, getcollectiontype(mapper, list.class, teacher.class));
运行时:
http://blog.csdn.net/hw1287789687/article/details/46955179
作者:黄威
联系方式:[email protected]