Java下利用Jackson进行JSON解析和序列化示例
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"} } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Android高仿IOS 滚轮选择控件
下一篇: java 类加载与自定义类加载器详解