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

来源:互联网 发布:php urlsafeb64encode 编辑:程序博客网 时间:2024/05/22 02:04

转载自:http://blog.csdn.net/accountwcx/article/details/24585987


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

一、准备工作

首先去官网下载Jackson工具包,下载地址http://wiki.fasterxml.com/JacksonDownload。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"}}}







0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 冰箱肉腐烂很臭怎么办 指环扣松了怎么办视频 奇迹mu端游杀人了怎么办 奇迹最强者号找不着了怎么办 v领地退不了押金怎么办 全民奇迹sf钻石变负数怎么办 电脑上的新建没有了怎么办 火车上行李箱砸人怎么办 违建拆除后怎么办房产证 外地车遇到限号怎么办 双号限行 违了怎么办 下高速当地限行怎么办 下高速发现限号怎么办 下高速正好限号怎么办 限号不让下高速怎么办 我的歌没有编曲怎么办 奇迹暖暖以前的账号怎么办 孕妇误吃桃胶了怎么办? 孕4个月吃了桃胶怎么办 刚怀孕吃了桃胶怎么办 额头被打了个包怎么办 裤子被84掉颜色怎么办 高中生晚上偷家里电脑上网怎么办 住高层睡不好觉怎么办 水瓶座如果恨我们了该怎么办 不锈钢保温瓶不保温了怎么办 壁纸颜色选深了怎么办 客厅壁纸太暗了怎么办 别人说你衣服丑怎么办 高楼热水器风大熄火怎么办 1楼独立下水2楼怎么办 宜家家具不会装怎么办 服务行业遇到低素质客户怎么办 服务类没有进项票怎么办 教师对学生缺乏耐心怎么办 买了竹料烂尾楼怎么办 刚毕业想换工作怎么办 客厅灯变不了光怎么办 塑料镀铝浸底漆咬底怎么办 标志408钥匙掉了怎么办 房本测绘页丢了怎么办