使用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
相关推荐
3. 使用`readValue`方法将JSON字符串反序列化为List对象集合。这里需要提供一个`TypeReference`来指定列表中元素的具体类型。例如,如果我们知道列表中包含的是`User`对象,可以这样写: ```java List<User> user...
而Jackson库则是处理JSON数据的利器,它能够帮助我们轻松地将Java对象序列化为JSON格式,以及将JSON反序列化为Java对象。在Spring框架中集成Jackson,可以实现高效且灵活的JSON数据交互。 一、Jackson简介 Jackson...
通过`ObjectMapper`,我们可以轻松地将Java对象序列化为JSON字符串,或者将JSON字符串反序列化为Java对象。 2. **`@JsonProperty`**:这是一个注解,用于标记Java对象的字段,指示Jackson在序列化或反序列化时应...
通过`ObjectMapper`,你可以方便地将Java对象序列化为JSON字符串,或将JSON文本反序列化为Java对象。 **使用示例**: ```java // 导入所需模块 import com.fasterxml.jackson.databind.ObjectMapper; // 定义一个...
Jackson的核心组件主要包括`ObjectMapper`,它是整个库的入口点,提供了将Java对象序列化为JSON,以及将JSON反序列化为Java对象的功能。以下是一个简单的例子,展示了如何使用`ObjectMapper`将一个Java对象转换为...
它提供了高效、灵活且功能丰富的API,用于将JSON数据序列化为Java对象,以及将Java对象反序列化为JSON格式。在本篇文章中,我们将深入探讨如何使用Jackson解析不同类型的JSON数据,包括Bean、List、Map, Bean>以及...
例如,可以使用`ObjectMapper.readTree()`方法将JSON字符串转化为`JsonNode`树形结构,或者用`ObjectMapper.readValue()`直接将JSON反序列化为Java对象。反之,`ObjectMapper.writeValueAsString()`和`ObjectMapper....
在上面的代码中,`@ResponseBody`注解表示该方法的返回值将被直接序列化为HTTP响应体的内容。`/api/data` URL请求将触发`getData()`方法,返回的`MyData`对象会被转化为JSON格式并发送给客户端。 虽然Jackson 1.9.x...
同样,如果有一个JSON字符串,我们也可以将其反序列化为Java对象: ```java YourJavaClass yourObject = mapper.readValue(jsonString, YourJavaClass.class); ``` 对于集合类型的转换,Jackson也提供了方便的方法...
通过`@JsonProperty`、`@JsonInclude`等注解,可以方便地将Java对象转换为JSON格式,并能将JSON字符串反序列化为Java对象。例如,你可以轻松地将一个Java实体类转换为JSON字符串,或者将JSON字符串解析为实体类实例...
除了将`List<Object>`转换为JSON,Jackson还提供了将JSON反序列化为Java对象的功能。例如,如果你有一个JSON字符串,可以使用`readValue`方法将其转换回`List<Object>`: ```java public List<Object> jsonToList...
在处理Guava Multimap时,Jackson会将其序列化为一个嵌套的JSON对象,键是Multimap的键,值是对应的值列表。例如,一个Multimap实例在JSON中可能表示为: ```json { "key1": ["value1", "value2"], "key2": [...
例如,`objectMapper.writeValueAsString(object)`将Java对象转换为JSON字符串,`objectMapper.readValue(jsonString, Class)`则将JSON字符串反序列化为指定类型的Java对象。 2. **注解驱动的映射**: Jackson通过...
通过调用ObjectMapper的writeValueAsString方法将User对象序列化为JSON字符串。由于设置了序列化包含规则为NON_NULL,因此在序列化后的JSON字符串中,属性值为null的属性不会被包含。 需要注意的是,无论采用注解...
Jackson是Java中的一款高效、功能丰富的处理JSON库,它提供了多种方式将JSON序列化为Java对象,以及将Java对象反序列化为JSON字符串。 在Java中,我们常常需要将Java对象如Bean、List或Map转换成JSON格式,以便于在...
首先,不要尝试将整个Collection直接转换为List,而是应该遍历Collection,将每个元素(此时应为一个JSON字符串)单独反序列化为`BookCatalog`对象。以下是一个修正后的示例: ```java // 从Redis读取缓存,直接...
当表单数据复杂,包含嵌套对象或数组时,可以将整个表单数据序列化为JSON字符串,然后在后端通过Jackson库反序列化为List。前端需要额外的JavaScript代码将表单数据转换为JSON,而后端控制器接收JSON字符串并解析。...
当JSON数据无法被反序列化为指定的对象时,Jackson会抛出`InvalidDefinitionException`,通常是因为缺少默认构造函数。为了解决这个问题,你需要在目标类(如`es.pojo.Item`)中添加一个无参构造函数。 2. **处理...
- **从JSON到Java集合**:同样,JSON数组可以反序列化为Java集合,如List或Set。 在实际开发中,还可以使用`@JsonProperty`注解来控制哪些字段应该被序列化或反序列化,以及它们在JSON中的名称。此外,`@...
通常的做法是将list序列化为JSON字符串,然后将这个字符串保存到SP中。在读取时,再将JSON字符串反序列化回list集合。这种方式虽然增加了处理的复杂性,但可以有效地利用SP进行数据缓存。 接下来,我们讨论如何实现...