天天看点

Jackson 反序列化为List

使用jackson 如何把json字符串反序列化为list呢? 

(list中是自定义对象) 

先看下常规的反序列化:

Jackson 反序列化为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();  

        }  

    }  

 运行结果: 

Jackson 反序列化为List

序列化

Jackson 反序列化为List

    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 

代码如下:

Jackson 反序列化为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());  

 运行时 

Jackson 反序列化为List

 没有达到预期效果,虽然反序列化成了list,但是并不是list<teacher>,而是list<hashmap> 

如何解决这个问题呢? 

解决方法:使用mapper.gettypefactory().constructparametrictype

Jackson 反序列化为List

/**    

     * 获取泛型的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));  

 运行时:

Jackson 反序列化为List

http://blog.csdn.net/hw1287789687/article/details/46955179

作者:黄威

联系方式:[email protected]