当前位置: 移动技术网 > IT编程>开发语言>Java > Java下利用Jackson进行JSON解析和序列化示例

Java下利用Jackson进行JSON解析和序列化示例

2019年07月22日  | 移动技术网IT编程  | 我要评论

java下常见的json类库有gson、json-lib和jackson等,jackson相对来说比较高效,在项目中主要使用jackson进行json和java对象转换,下面给出一些jackson的json操作方法。

一、准备工作

首先去官网下载jackson工具包。jackson有1.x系列和2.x系列,截止目前2.x系列的最新版本是2.2.3,2.x系列有3个jar包需要下载:

jackson-core-2.2.3.jar(核心jar包,)

jackson-annotations-2.2.3.jar(该包提供json注解支持,)

jackson-databind-2.2.3.jar()

//json序列化和反序列化使用的user类 
import java.util.date; 
 
public class user { 
  private string name; 
  private integer age; 
  private date birthday; 
  private string email; 
   
  public string getname() { 
    return name; 
  } 
  public void setname(string name) { 
    this.name = name; 
  } 
   
  public integer getage() { 
    return age; 
  } 
  public void setage(integer age) { 
    this.age = age; 
  } 
   
  public date getbirthday() { 
    return birthday; 
  } 
  public void setbirthday(date birthday) { 
    this.birthday = birthday; 
  } 
   
  public string getemail() { 
    return email; 
  } 
  public void setemail(string email) { 
    this.email = email; 
  } 
} 

二、java对象转json[json序列化]

import java.io.ioexception; 
import java.text.parseexception; 
import java.text.simpledateformat; 
 
import com.fasterxml.jackson.databind.objectmapper; 
 
public class jacksondemo { 
  public static void main(string[] args) throws parseexception, ioexception { 
    user user = new user(); 
    user.setname("小民");  
    user.setemail("xiaomin@sina.com"); 
    user.setage(20); 
     
    simpledateformat dateformat = new simpledateformat("yyyy-mm-dd"); 
    user.setbirthday(dateformat.parse("1996-10-01"));     
     
    /** 
     * objectmapper是json操作的核心,jackson的所有json操作都是在objectmapper中实现。 
     * objectmapper有多个json序列化的方法,可以把json字符串保存file、outputstream等不同的介质中。 
     * 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序列,并把结果输出成字符串。 
     */ 
    objectmapper mapper = new objectmapper(); 
     
    //user类转json 
    //输出结果:{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"} 
    string json = mapper.writevalueasstring(user); 
    system.out.println(json); 
     
    //java集合转json 
    //输出结果:[{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}] 
    list<user> users = new arraylist<user>(); 
    users.add(user); 
    string jsonlist = mapper.writevalueasstring(users); 
    system.out.println(jsonlist); 
  } 
} 

三、json转java类[json反序列化]

import java.io.ioexception; 
import java.text.parseexception; 
import com.fasterxml.jackson.databind.objectmapper; 
 
public class jacksondemo { 
  public static void main(string[] args) throws parseexception, ioexception { 
    string json = "{\"name\":\"小民\",\"age\":20,\"birthday\":844099200000,\"email\":\"xiaomin@sina.com\"}"; 
     
    /** 
     * objectmapper支持从byte[]、file、inputstream、字符串等数据的json反序列化。 
     */ 
    objectmapper mapper = new objectmapper(); 
    user user = mapper.readvalue(json, user.class); 
    system.out.println(user); 
  } 
} 

四、json注解

jackson提供了一系列注解,方便对json序列化和反序列化进行控制,下面介绍一些常用的注解。

@jsonignore 此注解用于属性上,作用是进行json操作时忽略该属性。

@jsonformat 此注解用于属性上,作用是把date类型直接转化为想要的格式,如@jsonformat(pattern = "yyyy-mm-dd hh-mm-ss")。

@jsonproperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把truename属性序列化为name@jsonproperty("name")。

import java.util.date; 
import com.fasterxml.jackson.annotation.*; 
 
public class user { 
  private string name; 
   
  //不json序列化年龄属性 
  @jsonignore  
  private integer age; 
   
  //格式化日期属性 
  @jsonformat(pattern = "yyyy年mm月dd日") 
  private date birthday; 
   
  //序列化email属性为mail 
  @jsonproperty("mail") 
  private string email; 
   
  public string getname() { 
    return name; 
  } 
  public void setname(string name) { 
    this.name = name; 
  } 
   
  public integer getage() { 
    return age; 
  } 
  public void setage(integer age) { 
    this.age = age; 
  } 
   
  public date getbirthday() { 
    return birthday; 
  } 
  public void setbirthday(date birthday) { 
    this.birthday = birthday; 
  } 
   
  public string getemail() { 
    return email; 
  } 
  public void setemail(string email) { 
    this.email = email; 
  } 
} 
import java.io.ioexception; 
import java.text.parseexception; 
import java.text.simpledateformat; 
 
import com.fasterxml.jackson.databind.objectmapper; 
 
public class jacksondemo { 
 
  public static void main(string[] args) throws parseexception, ioexception { 
    user user = new user(); 
    user.setname("小民");  
    user.setemail("xiaomin@sina.com"); 
    user.setage(20); 
     
    simpledateformat dateformat = new simpledateformat("yyyy-mm-dd"); 
    user.setbirthday(dateformat.parse("1996-10-01"));     
     
    objectmapper mapper = new objectmapper(); 
    string json = mapper.writevalueasstring(user); 
    system.out.println(json); 
    //输出结果:{"name":"小民","birthday":"1996年09月30日","mail":"xiaomin@sina.com"} 
  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网