Java利用Jackson进行序列化和反序列化

Java利用Jackson进行序列化和反序列化

1. 常用注解

@JsonIgnore 注解用在属性上,当JSON序列化和反序列化时忽略该属性。
@JsonFormat 注解用在属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”)。
@JsonAlias("name") 注解用在属性上,只在反序列化时生效。
@JsonProperty 注解用在属性上,作用是把该属性的名称序列化为另外一个名称,如把fullName属性序列化为name,@JsonProperty(“name”)。当序列化和反序列化名称不相同时,可以在对应的get方法上加@JsonProperty(“fullName”)和set方法上加@JsonAlias(“NaMe”)注解。set方法在反序列化时被调用,get方法在序列化时被调用。
@JsonIgnoreProperties(ignoreUnknown = true) 该注解用在类上,代表进行反序列化时如果类中没有对应的属性,可以忽略,也可以写成@JsonIgnoreProperties({ "createTime", "updateTime" }) 指定的字段不序列化和反序列化。

2. 序列化和反序列化

2.1. 常用方法

  // 2.1.1 序列化常用方法
  writeValue(File arg0, Object arg1)  把arg1转成json序列,并保存到arg0文件中。
  writeValue(OutputStream arg0, Object arg1) 把arg1转成json序列,并保存到arg0输出流中。
  writeValueAsBytes(Object arg0) 把arg0转成json序列,并把结果输出成字节数组。
  writeValueAsString(Object arg0) 把arg0转成json序列,并把结果输出成字符串。
  // 2.1.2 反序列化常用方法
  readValue(URL src, Class<T> valueType) 从给定资源反序列化为给定Java对象。
  readValue(String content, Class<T> valueType)  从给定的JSON内容字符串反序列化Java对象。
  readValue(File src, Class<T> valueType)  从给定的文件反序列化为Java对象。
  readValue(InputStream src, Class<T> valueType)  从给定的字节输入流反序列化为Java对象。
  readValue(Reader src, Class<T> valueType)  从给定的字符流反序列化为Java对象。

2.2 实例

  // 基本对象
  @Data
  @JsonIgnoreProperties(ignoreUnknown = true)
  public static class User {

    @JsonProperty(value = "NaMe")
    private String name;

    private int age;

    @JsonAlias("home-address")
    private String address;

    @JsonIgnore
    private Date createTime;
  }

public static void main(String[] args) throws IOException {
    // 原始字符串
    String a = "{\"NaMe\":\"hello\", \"age\":2, \"home-address\":\"chengdu\"}";
    ObjectMapper objectMapper = new ObjectMapper();
    // 反序列化(JSON字符串转对象)
    User label = objectMapper.readValue(a, User.class);
    // 以下结果输出:User(name=hello, age=2, address=chengdu, createTime=null)
    System.out.println(label);

    // 对象序列化(对象转为JSON字符串)
    final String string = objectMapper.writeValueAsString(label);
    // 以下结果输出:{"age":2,"address":"chengdu","NaMe":"hello"}
    System.out.println(string);
  }

你可能感兴趣的:(Java,序列化)