Java: 通过Jackson将JSON字符串反序列化成集合对象

Q: 如何通过Jackson反序列化复杂类型Collection

  1. ArrayList<MyObject>
  2. HashMap<String,MyObject>

A:

将JSON String与Object之间的转换只要使用ObjectMapper对象的readValue和writeValueAsString

    String jsonStr = objectMapper.writeValueAsString(myObj);
    MyObject myObj = objectMapper.readValue(jsonStr, MyObject.class);

但如果是复杂类型就不能直接传Class了,需要通过ObjectMapper的getTypeFactory()方法获取范型的类型

    JavaType listType = getCollectionType(ArrayList.class, MyObject.class);
    JavaType mapType = getCollectionType(ArrayList.class, String.class, MyObject.class);

    List<MyObject> objList = mapper.readValue(jsonStr, listType);
    Map<String, MyObject> objList = mapper.readValue(jsonStr, mapType);

    public JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
        return objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
    }
posted @ 2023-04-14 16:15  AaronTanooo  阅读(267)  评论(0)    收藏  举报