欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-06 16:21:32
java下常见的json类库有gson、json-lib和jackson等,jackson相对来说比较高效,在项目中主要使用jackson进行json和java对象转换,下...

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"} 
  } 
} 

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