`

Jackson 反序列化为List

    博客分类:
  • Java
阅读更多

使用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();
        }
    }

 运行时:

 

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

作者:黄威

联系方式:1287789687@qq.com

  • 大小: 6.5 KB
  • 大小: 96.4 KB
  • 大小: 94 KB
3
2
分享到:
评论
1 楼 jayung 2015-07-21  
收藏,待研究

相关推荐

    使用fasterxml.jackson反序列化json串

    3. 使用`readValue`方法将JSON字符串反序列化为List对象集合。这里需要提供一个`TypeReference`来指定列表中元素的具体类型。例如,如果我们知道列表中包含的是`User`对象,可以这样写: ```java List&lt;User&gt; user...

    spring使用jackson实现json

    而Jackson库则是处理JSON数据的利器,它能够帮助我们轻松地将Java对象序列化为JSON格式,以及将JSON反序列化为Java对象。在Spring框架中集成Jackson,可以实现高效且灵活的JSON数据交互。 一、Jackson简介 Jackson...

    SSM框架json使用jackson

    通过`ObjectMapper`,我们可以轻松地将Java对象序列化为JSON字符串,或者将JSON字符串反序列化为Java对象。 2. **`@JsonProperty`**:这是一个注解,用于标记Java对象的字段,指示Jackson在序列化或反序列化时应...

    jackson-annotations-2.2.3,jackson-core-2.2.3,jackson-databind-2.2.3

    通过`ObjectMapper`,你可以方便地将Java对象序列化为JSON字符串,或将JSON文本反序列化为Java对象。 **使用示例**: ```java // 导入所需模块 import com.fasterxml.jackson.databind.ObjectMapper; // 定义一个...

    Jackson的简单用法

    Jackson的核心组件主要包括`ObjectMapper`,它是整个库的入口点,提供了将Java对象序列化为JSON,以及将JSON反序列化为Java对象的功能。以下是一个简单的例子,展示了如何使用`ObjectMapper`将一个Java对象转换为...

    jackson框架解析json

    它提供了高效、灵活且功能丰富的API,用于将JSON数据序列化为Java对象,以及将Java对象反序列化为JSON格式。在本篇文章中,我们将深入探讨如何使用Jackson解析不同类型的JSON数据,包括Bean、List、Map, Bean&gt;以及...

    jackson2.6.0jar包

    例如,可以使用`ObjectMapper.readTree()`方法将JSON字符串转化为`JsonNode`树形结构,或者用`ObjectMapper.readValue()`直接将JSON反序列化为Java对象。反之,`ObjectMapper.writeValueAsString()`和`ObjectMapper....

    jackson-all-1.9.0.jar,jackson-all-1.9.9.jar,jackson-all-1.9.11.jar

    在上面的代码中,`@ResponseBody`注解表示该方法的返回值将被直接序列化为HTTP响应体的内容。`/api/data` URL请求将触发`getData()`方法,返回的`MyData`对象会被转化为JSON格式并发送给客户端。 虽然Jackson 1.9.x...

    jackson所需jar包

    同样,如果有一个JSON字符串,我们也可以将其反序列化为Java对象: ```java YourJavaClass yourObject = mapper.readValue(jsonString, YourJavaClass.class); ``` 对于集合类型的转换,Jackson也提供了方便的方法...

    jackson jar包

    通过`@JsonProperty`、`@JsonInclude`等注解,可以方便地将Java对象转换为JSON格式,并能将JSON字符串反序列化为Java对象。例如,你可以轻松地将一个Java实体类转换为JSON字符串,或者将JSON字符串解析为实体类实例...

    List转Json

    除了将`List&lt;Object&gt;`转换为JSON,Jackson还提供了将JSON反序列化为Java对象的功能。例如,如果你有一个JSON字符串,可以使用`readValue`方法将其转换回`List&lt;Object&gt;`: ```java public List&lt;Object&gt; jsonToList...

    jackson-datatype-guava-2.8.0.zip

    在处理Guava Multimap时,Jackson会将其序列化为一个嵌套的JSON对象,键是Multimap的键,值是对应的值列表。例如,一个Multimap实例在JSON中可能表示为: ```json { "key1": ["value1", "value2"], "key2": [...

    jackson的jar包

    例如,`objectMapper.writeValueAsString(object)`将Java对象转换为JSON字符串,`objectMapper.readValue(jsonString, Class)`则将JSON字符串反序列化为指定类型的Java对象。 2. **注解驱动的映射**: Jackson通过...

    jackson 实体转json 为NULL或者为空不参加序列化(实例讲解)

    通过调用ObjectMapper的writeValueAsString方法将User对象序列化为JSON字符串。由于设置了序列化包含规则为NON_NULL,因此在序列化后的JSON字符串中,属性值为null的属性不会被包含。 需要注意的是,无论采用注解...

    json_jackson_junit_demo.zip

    Jackson是Java中的一款高效、功能丰富的处理JSON库,它提供了多种方式将JSON序列化为Java对象,以及将Java对象反序列化为JSON字符串。 在Java中,我们常常需要将Java对象如Bean、List或Map转换成JSON格式,以便于在...

    JSON序列化Redis读取出错问题解决方案

    首先,不要尝试将整个Collection直接转换为List,而是应该遍历Collection,将每个元素(此时应为一个JSON字符串)单独反序列化为`BookCatalog`对象。以下是一个修正后的示例: ```java // 从Redis读取缓存,直接...

    SpringMVC接收多个对象的4种方法

    当表单数据复杂,包含嵌套对象或数组时,可以将整个表单数据序列化为JSON字符串,然后在后端通过Jackson库反序列化为List。前端需要额外的JavaScript代码将表单数据转换为JSON,而后端控制器接收JSON字符串并解析。...

    springboot项目总结.docx

    当JSON数据无法被反序列化为指定的对象时,Jackson会抛出`InvalidDefinitionException`,通常是因为缺少默认构造函数。为了解决这个问题,你需要在目标类(如`es.pojo.Item`)中添加一个无参构造函数。 2. **处理...

    Jackson的用法实例分析

    - **从JSON到Java集合**:同样,JSON数组可以反序列化为Java集合,如List或Set。 在实际开发中,还可以使用`@JsonProperty`注解来控制哪些字段应该被序列化或反序列化,以及它们在JSON中的名称。此外,`@...

    sp缓存list集合工具类

    通常的做法是将list序列化为JSON字符串,然后将这个字符串保存到SP中。在读取时,再将JSON字符串反序列化回list集合。这种方式虽然增加了处理的复杂性,但可以有效地利用SP进行数据缓存。 接下来,我们讨论如何实现...

Global site tag (gtag.js) - Google Analytics