`
frank1998819
  • 浏览: 763884 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

使用Jackson 如何把json字符串反序列化为List呢(转)

    博客分类:
  • Java
 
阅读更多

使用Jackson 如何把json字符串反序列化为List呢?
(List中是自定义对象)
先看下常规的反序列化:

Java代码 复制代码 收藏代码
  1. @Test
  2. publicvoid test_reserialize(){
  3. String jsonInput = "{\"addrr\":{\"country\":\"中国\",\"state\":\"湖北省\",\"street\":\"清河\"},\"age\":25,\"hobby\":\"\",\"name\":\"黄威\"}";
  4. ObjectMapper mapper = new ObjectMapper();
  5. Student student;
  6. try {
  7. student = mapper.readValue(jsonInput, Student.class);
  8. System.out.println(student.getAddrr().getStreet());
  9. System.out.println(student.getName());
  10. } catch (Exception e) {
  11. e.printStackTrace();
  12. }
  13. }
@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();
        }
    }

运行结果:

序列化

Java代码 复制代码 收藏代码
  1. @Test
  2. publicvoid test_004(){
  3. List<Teacher> list=new ArrayList<Teacher>();
  4. Teacher t=new Teacher();
  5. t.setId(2);
  6. t.setName("雄鹰表");
  7. t.setTitle("aa");
  8. list.add(t);
  9. t=new Teacher();
  10. t.setId(3);
  11. t.setName("陈定生");
  12. t.setTitle("bb");
  13. list.add(t);
  14. t=new Teacher();
  15. t.setId(4);
  16. t.setName("张阿勇");
  17. t.setTitle("cc");
  18. list.add(t);
  19. ObjectMapper mapper = new ObjectMapper();
  20. String content;
  21. try {
  22. content = mapper.writeValueAsString(list);
  23. System.out.println(content);
  24. } catch (JsonGenerationException e) {
  25. e.printStackTrace();
  26. } catch (JsonMappingException e) {
  27. e.printStackTrace();
  28. } catch (IOException e) {
  29. e.printStackTrace();
  30. }
  31. }
@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
代码如下:

Java代码 复制代码 收藏代码
  1. @Test
  2. publicvoid test_006(){
  3. String jsonInput="[{\"id\":2,\"title\":\"aa\",\"name\":\"雄鹰表\"},{\"id\":3,\"title\":\"bb\",\"name\":\"陈定生\"},{\"id\":4,\"title\":\"cc\",\"name\":\"张阿勇\"}]";
  4. ObjectMapper mapper = new ObjectMapper();
  5. List student;
  6. try {
  7. student = mapper.readValue(jsonInput, List.class);
  8. System.out.println(student.size());
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }
  12. }
@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

Java代码 复制代码 收藏代码
  1. /**
  2. * 获取泛型的Collection Type
  3. * @param collectionClass 泛型的Collection
  4. * @param elementClasses 元素类
  5. * @return JavaType Java类型
  6. * @since 1.0
  7. */
  8. publicstatic JavaType getCollectionType(ObjectMapper mapper,Class<?> collectionClass, Class<?>... elementClasses) {
  9. return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
  10. }
  11. @Test
  12. publicvoid test_006(){
  13. String jsonInput="[{\"id\":2,\"title\":\"aa\",\"name\":\"雄鹰表\"},{\"id\":3,\"title\":\"bb\",\"name\":\"陈定生\"},{\"id\":4,\"title\":\"cc\",\"name\":\"张阿勇\"}]";
  14. ObjectMapper mapper = new ObjectMapper();
  15. List student;
  16. try {
  17. student = mapper.readValue(jsonInput, getCollectionType(mapper, List.class, Teacher.class));
  18. System.out.println(student.size());
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. }
  22. }
/**   
     * 获取泛型的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
分享到:
评论

相关推荐

    jackson 对象json字符串数组集合互转

    在标题“Jackson对象json字符串数组集合互转”中,提到的核心概念是Jackson如何处理JSON字符串与Java集合(如List、Array等)之间的转换。下面将详细解释这一过程以及涉及的相关知识点。 1. JSON与Java对象映射: ...

    java对象转换为json字符串或字符串数组

    除了序列化,`json-lib`还支持反序列化,即将JSON字符串转换回Java对象: ```java Person deserializedPerson = (Person) JSONSerializer.toJava(jsonString); ``` 6. JSONPath和JSONSchema: 在实际应用中,...

    json字符串转成 Map/List

    在Java中,将JSON字符串转换为Map或List是常见的操作,这在处理服务器返回的数据或者进行数据序列化时非常有用。 JSON字符串的结构主要包括对象(键值对的集合,用花括号{}包围)和数组(有序元素的集合,用方括号...

    解析Json字符串直接转换为对象(包括多层List集合 嵌套)所用jar包

    现在,我们可以使用Jackson库的`ObjectMapper`类将JSON字符串转换为Java对象: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class JsonParser { public static void main(String[] args...

    使用json-lib将java对象转换成json字符串

    JSON字符串到Java对象的转换通常通过反序列化实现,而Java对象到JSON字符串的转换则称为序列化。 - json-lib库提供了一套API,使得这种转换变得简单。例如,使用`net.sf.json.JSONObject.fromObject()`方法可以将...

    java中解析json字符串

    除了解析JSON字符串到Java对象,这两个库还支持将Java对象转换为JSON字符串,以及解析JSON到Map或List等数据结构。 3. **其他库** 除了Jackson和Gson,还有其他的JSON处理库,如org.json(提供简单的JSON工具类)...

    java的Jackson将json字符串转换成泛型List

    然后,我们可以使用`ObjectMapper`的`readValue()`方法,传入JSON字符串和之前构建的`JavaType`,来反序列化JSON字符串为泛型的`List&lt;YourBean&gt;`: ```java List&lt;YourBean&gt; lst = (List) mapper.readValue(json...

    Json与java对象之间相互转换源码

    将JSON字符串反序列化为Java对象: ```java Person person = gson.fromJson(jsonString, Person.class); ``` 2. **Jackson转换:** Jackson是另一个流行的JSON处理库,提供了更丰富的功能和更好的性能。同样...

    复杂的json字符串解析(真实案例)

    在这个真实案例中,我们将深入探讨如何使用Gson库来解析复杂的JSON字符串。 Gson是Google提供的一个Java库,它能够将Java对象转换为JSON字符串,反之亦然。在解析复杂的JSON字符串时,Gson提供了强大的功能,包括对...

    利用jackson包进行json字符串与pojo类之间的转换源代码

    本篇将详细介绍如何利用Jackson包进行JSON字符串与POJO(Plain Old Java Object)类之间的转换,并探讨相关源码。 Jackson库主要包括三个核心模块:`jackson-core`、`jackson-annotations`和`jackson-databind`。在...

    Jackson 框架 json 到 复杂 list 的转换

    在JSON到Java对象的转换中,Jackson允许我们将JSON字符串解析成Java对象,包括列表(List)和映射(Map)。对于复杂列表,这意味着列表中的每个元素可能是一个复杂的Java对象,包含了嵌套的对象或者列表。例如,一个用户...

    springboot工程中使用ObjectMapper解析JSON字符串

    在Spring Boot应用中,ObjectMapper是Jackson库的核心组件,它被广泛用于处理JSON数据,包括序列化(将Java对象转换为JSON字符串)和反序列化(将JSON字符串转换回Java对象)。这个强大的工具使得在Spring Boot工程...

    json转化字符串案例

    这个“json转化字符串案例”应该是提供了一些示例,演示如何将Java对象转化为JSON字符串,以及如何将JSON字符串反序列化为Java对象。这对于理解和学习JSON在Java环境中的应用至关重要,特别是对于初学者来说。 首先...

    spring使用jackson实现json

    在Spring中,我们通常会使用`Jackson.databind`模块,因为它提供了`ObjectMapper`类,可以方便地将Java对象转换为JSON字符串,反之亦然。为了集成Jackson,首先需要在项目中引入对应的依赖。对于Maven项目,可以在...

    字符串或链表转json

    在Java编程中,处理JSON数据时,Jackson是一个非常流行的开源工具包,它提供了将Java对象转换为JSON字符串以及从JSON字符串反序列化回Java对象的功能。 Jackson库由FasterXML公司开发,其主要组件包括`Jackson-...

    jackson json 转 map 数值科学计数法的问题解决.docx

    下面是一个示例代码,演示如何使用 ObjectMapper 将 JSON 字符串转换为 Map,同时启用 USE_BIG_DECIMAL_FOR_FLOATS 选项以解决科学计数法的问题: ```java ObjectMapper mapper = new ObjectMapper(); mapper....

    后台日期类型转json字符串传到页面

    然后,我们使用`JSONArray`的`fromObject()`方法将`list`转换为JSON字符串。在没有特殊配置的情况下,JSON字符串中的日期会显示为服务器本地的日期时间格式,而非我们希望的人性化的日期格式。 为了解决这个问题,...

    使用fasterxml.jackson反序列化json串

    在描述中提到的问题是,当我们尝试将JSON字符串反序列化为Java的List对象集合时,如果没有指定确切的类类型,Jackson可能会将列表中的对象反序列化为LinkedHashMap。这是因为JSON中的键值对默认映射到了Map结构。当...

    Java Json序列化与反序列化

    JSON是一种轻量级的数据交换格式,它允许我们将Java对象转换为JSON字符串,反之亦然,方便在网络间传输或者保存在文件系统中。本篇文章将深入探讨Java中JSON的序列化与反序列化,以及相关的工具库。 一、JSON概述 ...

    json字符串和java对象间的转换

    将Java对象转换为JSON字符串同样使用`ObjectMapper`: ```java Person p = new Person("张三", 30, "北京"); String jsonString = mapper.writeValueAsString(p); ``` 三、特殊类型转换 1. 集合和数组 对于List、Set...

Global site tag (gtag.js) - Google Analytics