zoukankan      html  css  js  c++  java
  • 【json】Jackson的使用

    Jackson所有的操作都是通过ObjectMapper对象实例来操作的,可以重用这个对象实例。

    首先定义一个实例:
    ObjectMapper mapper = new ObjectMapper();

    定义一个Student类:

    	package jackson;
    
    	import java.util.Date;
    
    	public class Student {
    
    		private String name;
    		private int age;
    		private String position;
    		private Date createTime;
    
    		public String getName() {
    			return name;
    		}
    
    		public void setName(String name) {
    			this.name = name;
    		}
    
    		public int getAge() {
    			return age;
    		}
    
    		public void setAge(int age) {
    			this.age = age;
    		}
    
    		public String getPosition() {
    			return position;
    		}
    
    		public void setPosition(String position) {
    			this.position = position;
    		}
    
    		public Date getCreateTime() {
    			return createTime;
    		}
    
    		public void setCreateTime(Date createTime) {
    			this.createTime = createTime;
    		}
    
    		@Override
    		public String toString() {
    			return "Student [name=" + name + ", age=" + age + ", position="
    					+ position + ", createTime=" + createTime + "]";
    		}
    
    	}
    

    准备一个字符串:
    String jsonString = "{"name":"king","age":21}";

    常规操作: 字符串转对象

         mapper.readValue(jsonString,Student.class);
         System.out.println(student);
    

    打印输出结果:

    Student [name=king, age=21, position=null, createTime=null]
    

    常规操作: 对象转字符串

    		student.setCreateTime(new Date());
    		String json = mapper.writeValueAsString(student);
    		System.out.println(json);
    

    打印输出结果:

    {"name":"king","age":21,"position":null,"createTime":1524819355361}
    

    如何改变输出的日期字段格式?

    两种方式:一种SimpleDateFormat,另外一种通过在属性字段注解
    在Student.java属性字段createTime注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    
    import com.fasterxml.jackson.annotation.JsonFormat;
    
    public class Student {
    
    	private String name;
    	private int age;
    	private String position;
    	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")  
    	private Date createTime;
          
           //省略get,set
    }
    
    

    打印输出结果:

    {"name":"king","age":21,"position":null,"createTime":"2018-04-27 09:00:56"}
    

    8小时时间差问题:上面打印结果发现,时间少8小时。

    解决方法: 注解上增加时区。

    public class Student {
    
    	private String name;
    	private int age;
    	private String position;
    	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")  
    	private Date createTime;
            
            //省略get,set
    }
    

    打印输出结果:

    {"name":"king","age":21,"position":null,"createTime":"2018-04-27 17:07:33"}
    

    其他的一些奇怪的配置

    1. 输出格式化,就是分行显示,该功能慎用
      mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
      
      打印输出样式
      {
        "name" : "king",
        "age" : 21,
        "position" : null,
        "createTime" : "2018-04-27 17:29:01"
      }
      
    2. 异常忽略
      字符串转对象时,如果字符串中字段在对象中不存在,则忽略该字段
      @JsonIgnoreProperties(ignoreUnknown = true)
      public class Student {
      
      	private String name;
      	private int age;
      	private String position;
      	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")  
      	private Date createTime;
      	//省略get,set
          }
      

    3.其他注解
    @JsonIgnore 用来忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法时,和Filed效果一样。
    @JsonIgnoreProperties(ignoreUnknown = true) 将这个注解写在类上之后,就会忽略类中不存在的字段
    @JsonIgnoreProperties({ "internalId", "secretKey" }) 将这个注解写在类上之后,指定的字段不会被序列化和反序列化。

    `objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE,true);` ***添加这个配置后,输出时自动将类名作为根元素。***
    
    ````输出如下:
    `{"Student":{"name":"king","age":21,"position":null,"createTime":"2018-05-02 10:06:29"}}`
    ````
    
     `@JsonRootName("myPojo")` ***将这个注解写在类上之后,根据指定的值生成根元素,作用类似于上面***
    

    (博客园的这个markdown编辑器真不会用)

  • 相关阅读:
    北航软院2012级C#期末考试部分考题解答
    题目1013:开门人和关门人(字符串处理)
    char * 与char []探究理解
    题目1017:还是畅通工程(最小生成树)
    最小生成树(Prim算法+Kruskal算法)
    题目1018:统计同成绩学生人数(hash简单应用)
    GoogLeNet InceptionV2/V3/V4
    Python库
    卷积为什么如此强大?一文全解深度学习中的卷积
    神经网络训练tricks
  • 原文地址:https://www.cnblogs.com/30go/p/8963290.html
Copyright © 2011-2022 走看看