举例讲解Java的Jackson库中ObjectMapper类的使用

 更新时间:2016年01月13日 12:03:45   投稿:goldensun  
这篇文章主要介绍了举例讲解Java的Jackson库中ObjectMapper类的使用,Jackson库通常被用来实现Java的对象和JSON之间的转换功能,需要的朋友可以参考下

ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然。它使用JsonParser和JsonGenerator的实例实现JSON实际的读/写。

类声明
以下是org.codehaus.jackson.map.ObjectMapper类的声明:

public class ObjectMapper
  extends ObjectCodec
   implements Versioned

嵌套类

S.N. 类 & 描述
1 static class ObjectMapper.DefaultTypeResolverBuilder//定制TypeResolverBuilder,提供所谓的“默认输入”使用类型解析构建器(见enableDefaultTyping()了解详细信息)。
2 static class ObjectMapper.DefaultTyping//使用enableDefaultTyping()枚举指定什么样的类型(类)默认输入应该使用。

构造函数
S.N. 构造函数 & 描述
1 ObjectMapper()//默认的构造函数,这将构建默认JsonFactory必要时使用StdSerializerProvider作为其SerializerProvider,并BeanSerializerFactory作为其SerializerFactory。
2 ObjectMapper(JsonFactory jf)//构造使用指定的JsonFactory构建必要的JsonParsers和/或JsonGenerators映射。
3 ObjectMapper(JsonFactory jf, SerializerProvider sp, DeserializerProvider dp)
4 ObjectMapper(JsonFactory jf, SerializerProvider sp, DeserializerProvider dp, SerializationConfig sconfig, DeserializationConfig dconfig)
5 ObjectMapper(SerializerFactory sf) 不推荐使用。使用其他构造来代替; 注意,可以设置序列化工厂setSerializerFactory(org.codehaus.jackson.map.SerializerFactory)

这个类继承了以下类方法:
java.lang.Object

例子
测试类基本代码如下

/* 
 * @project java 
 * @package 
 * @file Jackson.java 
 * @version 1.0 

 */ 
 
public class Jackson { 
  /* 
   * 
   * Class Descripton goes here. 
   * 
   * @class Jackson 
   * @version 1.0 
   */ 
  public static JsonGenerator jsonGenerator = null; 
  private static ObjectMapper mapper = new ObjectMapper(); 
  public static void main(String[] args) { 
    Student student = new Student(); 
    student.setIsstudent(true); 
    student.setUid(1000); 
    student.setUname("xiao liao"); 
    student.setUpwd("123"); 
    student.setNumber(12); 
     
    Map<String, Student> stuMap = new HashMap<String, Student>(); 
    stuMap.put("1", student); 
    stuMap.put("2", student); 
     
    List<Object> stuList = new ArrayList<Object>(); 
    List<Student> stuList1 = new ArrayList<Student>(); 
    stuList1.add(student); 
    student= new Student(); 
    student.setIsstudent(false); 
    student.setUid(200); 
    student.setUname("xiao mi"); 
    stuList1.add(student); 
     
    stuList.add(student); 
    stuList.add("xiao xin"); 
    stuList.add("xiao er"); 
    stuList.add(stuMap); 
     
    //readJson2List(); 
    try { 
      //readJson2Array(); 
      //writeArray2Json(array); 
      //writeJson2List(); 
      //writeEntity2Json(student); 
      writeJson2Entity(); 
      //writeMap2Json(stuMap); 
      //writeList2Json(stuList1); 
       
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
   /** 
   * 
   * <code>writeEntity2Json</code> 
   * @description: TODO(实体类转换成json) 
   * @param object 
   * @throws IOException 
   */ 
   public static void writeEntity2Json(Object object) throws IOException { 
      mapper.writeValue( new File("D:\\developSoft\\aaadowload\\testjson1\\lib\\aa.txt"),object ); 
      mapper.writeValue( System.out,object ); 
      
   } 
   /** 
   * 
   * <code>writeArray2Json</code> 
   * @description: TODO(数组转换成json数组) 
   * @param object 
   * @throws IOException 
   */ 
   public static void writeArray2Json(Object object) throws IOException { 
      
     // writeValue具有和writeObject相同的功能 
     mapper.writeValue( new File("D:\\developSoft\\aaadowload\\testjson1\\lib\\aa.txt"),object ); 
     mapper.writeValue(System.out,object ); 
      
   } 
   /** 
   * 
   * <code>writeMap2Json</code> 
   * @description: TODO(map对象转换成json对象) 
   * @param object 
   * @throws IOException 
   * @since  2011-11-8   廖益平 
   */ 
   public static void writeMap2Json(Object object) throws IOException { 
      
     System.out.println("使用ObjectMapper-----------"); 
     // writeValue具有和writeObject相同的功能 
     System.out.println("==>"+mapper.writeValueAsString(object)); 
     mapper.writeValue( new File("D:\\developSoft\\aaadowload\\testjson1\\lib\\aamap.txt"),object ); 
     mapper.writeValue( System.out , object ); 
   } 
   /** 
   * 
   * <code>writeList2Json</code> 
   * @description: TODO(list转换成json) 
   * @param object 
   * @throws IOException 
   */ 
   public static void writeList2Json(Object object) throws IOException { 
     System.out.println("==>"+mapper.writeValueAsString(object)); 
     mapper.writeValue( new File("D:\\developSoft\\aaadowload\\testjson1\\lib\\aamap.txt"),object ); 
     mapper.writeValue( System.out , object ); 
   } 
   /** 
   * 
   * <code>writeJson2Entity</code> 
   * @description: TODO(json转换成实体) 
   * @throws IOException 
   */ 
   public static void writeJson2Entity() throws IOException { 
     System.out.println("json串转换成entity-------------"); 
//    File file = new File("D:\\developSoft\\aaadowload\\testjson1\\lib\\aa.txt"); 
//    FileInputStream inputStream = new FileInputStream(file); 
//    Student student = mapper.readValue(inputStream,Student.class); 
//    System.out.println(student.toString()); 
     //漂亮输出 
     //mapper.defaultPrettyPrintingWriter().writeValueAsString(value); 
   
     String json = "{\"uid\":1000,\"uname\":\"xiao liao\",\"upwd\":\"123\",\"number\":12.0,\"isstudent\":true}"; 
     Student student1 = mapper.readValue(json,Student.class); 
     System.out.println("json2:"+student1.toString()); 
   } 
   /** 
   * 
   * <code>writeJson2List</code> 
   * @description: TODO(json专程list对象) 
   * @throws IOException 
   */ 
   public static void writeJson2List() throws IOException { 
     System.out.println("json串转换成entity-------------"); 
     File file = new File("D:\\developSoft\\aaadowload\\testjson1\\lib\\aa.txt"); 
     FileInputStream inputStream = new FileInputStream(file); 
     Student student = mapper.readValue(inputStream,Student.class); 
     System.out.println(student.toString()); 
      
     String json = "[{\"uid\":1000,\"uname\":\"xiao liao\",\"upwd\":\"123\",\"number\":12.0,\"isstudent\":true},{\"uid\":200,\"uname\":\"xiao mi\",\"upwd\":null,\"number\":0.0,\"isstudent\":false}]"; 
     List<LinkedHashMap<String, Object>> s= mapper.readValue(json,List.class); 
     for (int i = 0; i < s.size(); i++) { 
       LinkedHashMap<String, Object> link = s.get(i); 
       Set<String> key = link.keySet(); 
       for (Iterator iterator = key.iterator(); iterator.hasNext();) { 
        String string = (String) iterator.next(); 
        System.out.println(string+"==>"+link.get(string)); 
         
      } 
       System.out.println("json:"+i+""+s.get(i).toString()); 
       
    } 
   } 
   /** 
    * JSON转换为List对象 
    */ 
   public static void readJson2List() { 
    String json = "[{\"uid\":1,\"uname\":\"www\",\"number\":234,\"upwd\":\"456\"}," 
     + "{\"uid\":5,\"uname\":\"tom\",\"number\":3.44,\"upwd\":\"123\"}]"; 
    try { 
    List<LinkedHashMap<String, Object>> list = mapper.readValue( 
     json, List.class); 
    System.out.println(list.size()); 
    for (int i = 0; i < list.size(); i++) { 
     Map<String, Object> map = list.get(i); 
     Set<String> set = map.keySet(); 
     for (Iterator<String> it = set.iterator(); it.hasNext();) { 
     String key = it.next(); 
     System.out.println(key + ":" + map.get(key)); 
     } 
    } 
    } catch (JsonParseException e) { 
    e.printStackTrace(); 
    } catch (JsonMappingException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
   } 
   /** 
    * JSON转换为List对象 
    */ 
   public static void readJson2Array() { 
     String json = "[{\"uid\":1,\"uname\":\"www\",\"number\":234,\"upwd\":\"456\"}," 
       + "{\"uid\":5,\"uname\":\"tom\",\"number\":3.44,\"upwd\":\"123\"}]"; 
     try { 
       Student[] students = mapper.readValue(json, Student[].class); 
       for (Student student : students) { 
        System.out.println(">"+student.toString()); 
      } 
     } catch (JsonParseException e) { 
       e.printStackTrace(); 
     } catch (JsonMappingException e) { 
       e.printStackTrace(); 
     } catch (IOException e) { 
       e.printStackTrace(); 
     } 
   } 
 
} 

打印结果 :

串转换成entity-------------
json2:uid=1000,name=xiao liao,upwd=123,number=12.0,isStudent=true

writeMap2Json -----------
{"2":{"uid":1000,"uname":"xiao liao","upwd":"123","number":12.0,"isstudent":true},"1":{"uid":1000,"uname":"xiao liao","upwd":"123","number":12.0,"isstudent":true}}

readJson2Array------------------
>uid=1,name=www,upwd=456,number=234.0,isStudent=false
>uid=5,name=tom,upwd=123,number=3.44,isStudent=false
writeMap2Json -----------
{"2":{"uid":1000,"uname":"xiao liao","upwd":"123","number":12.0,"isstudent":true},"1":{"uid":1000,"uname":"xiao liao","upwd":"123","number":12.0,"isstudent":true}}

大家逐个自己试试吧  ,上面也是我的测试代码

相关文章

  • Java实现简单LRU缓存机制的方法

    Java实现简单LRU缓存机制的方法

    这篇文章主要介绍了Java实现简单LRU缓存机制的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Struts2学习教程之输入校验示例详解

    Struts2学习教程之输入校验示例详解

    这篇文章主要给大家介绍了关于Struts2学习教程之输入校验的相关资料,文中通过示例介绍的非常详细,对大家学习或者使用struts2具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • SpringCloud微服务熔断器Hystrix使用详解

    SpringCloud微服务熔断器Hystrix使用详解

    这篇文章主要介绍了Spring Cloud Hyxtrix的基本使用,它是Spring Cloud中集成的一个组件,在整个生态中主要为我们提供服务隔离,服务熔断,服务降级功能,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Java面向对象基础知识之封装,继承,多态和抽象

    Java面向对象基础知识之封装,继承,多态和抽象

    这篇文章主要介绍了Java面向对象的封装,继承,多态和抽象,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-11-11
  • Java使用GZIP压缩导致HTTP请求返回乱码问题解决

    Java使用GZIP压缩导致HTTP请求返回乱码问题解决

    这篇文章主要为大家介绍了Java压缩GZIP导致HTTP请求返回乱码问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Spring Cloud项目前后端分离跨域的操作

    Spring Cloud项目前后端分离跨域的操作

    这篇文章主要介绍了Spring Cloud项目前后端分离跨域的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 详解Nacos中注册中心和配置中心的实现

    详解Nacos中注册中心和配置中心的实现

    Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案。而 Nacos 作为 Spring Cloud Alibaba 的核心组件之一,提供了两个非常重要的功能:注册中心和配置中心,我们今天来了解和实现一下二者
    2022-08-08
  • javaweb实现app扫码登录功能

    javaweb实现app扫码登录功能

    这篇文章主要为大家详细介绍了javaweb实现app扫码登录功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • SpringBoot中整合MyBatis-Plus的方法示例

    SpringBoot中整合MyBatis-Plus的方法示例

    这篇文章主要介绍了SpringBoot中整合MyBatis-Plus的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Spring声明式事务配置使用详解

    Spring声明式事务配置使用详解

    这篇文章主要介绍了在spring注解中,使用声明式事务,需要用到两个核心的注解:@Transactional注解和@EnableTransactionManagement注解。将@Transactional注解加在方法上,@EnableTransactionManagement注解加在配置类上
    2022-08-08

最新评论