Jackson 反序列化为List
来源:互联网 发布:2017网络热词英文 编辑:程序博客网 时间:2024/06/08 07:24
使用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(); } }
运行结果:
序列化
@Test 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"); list.add(t); t=new Teacher(); t.setId(4); t.setName("张阿勇"); t.setTitle("cc"); list.add(t); ObjectMapper mapper = new ObjectMapper(); String content; try { content = mapper.writeValueAsString(list); System.out.println(content); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
运行结果:
[{“id”:2,”title”:”aa”,”name”:”雄鹰表”},{“id”:3,”title”:”bb”,”name”:”陈定生”},{“id”:4,”title”:”cc”,”name”:”张阿勇”}]
反序列化
把上述json字符串反序列化为List
代码如下:
@Test public void test_006(){ String jsonInput="[{\"id\":2,\"title\":\"aa\",\"name\":\"雄鹰表\"},{\"id\":3,\"title\":\"bb\",\"name\":\"陈定生\"},{\"id\":4,\"title\":\"cc\",\"name\":\"张阿勇\"}]"; ObjectMapper mapper = new ObjectMapper(); List student; try { student = mapper.readValue(jsonInput, List.class); System.out.println(student.size()); } catch (Exception e) { e.printStackTrace(); } }
运行时
没有达到预期效果,虽然反序列化成了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 public void test_006(){ String jsonInput="[{\"id\":2,\"title\":\"aa\",\"name\":\"雄鹰表\"},{\"id\":3,\"title\":\"bb\",\"name\":\"陈定生\"},{\"id\":4,\"title\":\"cc\",\"name\":\"张阿勇\"}]"; ObjectMapper mapper = new ObjectMapper(); List student; try { student = mapper.readValue(jsonInput, getCollectionType(mapper, List.class, Teacher.class)); System.out.println(student.size()); } catch (Exception e) { e.printStackTrace(); } }
参考:Jackson将json字符串转换成泛型List
1 0
- Jackson 反序列化为List
- 先反序列化为list,再遍历list,将每个元素反序列化为hashmap
- Jackson 反序列化问题
- Jackson反序列化问题
- JSON反序列化为实体类
- JSON反序列化为Hibernate实体类
- 对象序列化反序列化为xml
- 将json字符串反序列化为DataTable
- XML文件反序列化为实体类
- XML字符串反序列化为对象
- unity xml反序列化为数据类
- 使用JackSon反序列化,封装数据
- Jackson反序列化的实现方法
- Jackson序列化和反序列化
- JSON 转 POJO: jackson 反序列化
- Jackson 枚举序列化/反序列化
- jackson反序列化漏洞分析
- jackson 序列化/反序列化
- enum的一种应用
- 九度OJ(字符串、位移操作、背包、递归、dp栈模拟、八皇后)
- 自定义泛形
- java网络编程
- HDU 1969
- Jackson 反序列化为List
- 离线看Android官方文档
- ios 自动布局库masonry的技巧分享1
- eclipse配置android开发环境
- [CortexM0--stm32f0308]系统框架
- HDU 2289 cup
- C 语言 运算符表
- java中queue的使用
- apacheBench简单使用