在项目开发过程中,当客户端与服务器响应时,数据交互是必不可少的。然而通过Json实现数据交互成为我们开发中的一部分,进而Jackson为我们的Json转化提供了很好的机制。下面我将利用实例总结如何使用jackson.

一、准备

如果你需要使用jackson,你必须得导入相应的架包,有如下三个包

jackson-annotations;jackson-core;jackson-databind

Maven引入依赖代码

<span style="font-size:18px;">			<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.3.0</version>
</dependency></span>

二、不带日期的对象实体与json互转

1.定义实体UserBean.java,DeptBean.java

<span style="font-size:18px;">package com.jackson.bean;

import java.util.List;

public class DeptBean {
private int deptId;
private String deptName;
private List<UserBean> userBeanList; public int getDeptId() {
return deptId;
}
public void setDeptId(int deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public List<UserBean> getUserBeanList() {
return userBeanList;
}
public void setUserBeanList(List<UserBean> userBeanList) {
this.userBeanList = userBeanList;
} @Override
public String toString() {
String userBeanListString = "";
for (UserBean userBean : userBeanList) {
userBeanListString += userBean.toString() + "\n";
} return "DeptBean [deptId=" + deptId + ", deptName=" + deptName
+ ", \nuserBeanListString=" + userBeanListString + "]";
}
public DeptBean(int deptId, String deptName, List<UserBean> userBeanList) {
super();
this.deptId = deptId;
this.deptName = deptName;
this.userBeanList = userBeanList;
}
public DeptBean() {
super();
} }
</span>
<span style="font-size:18px;">package com.jackson.bean;

public class UserBean {
private int userId;
private String userName;
private String password;
private String email;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "UserBean [userId=" + userId + ", userName=" + userName
+ ", password=" + password + ", email=" + email + "]";
}
public UserBean(int userId, String userName, String password, String email) {
super();
this.userId = userId;
this.userName = userName;
this.password = password;
this.email = email;
}
public UserBean() {
super();
} }
</span>

注意:在实体中必须存在无参的构造方法,否则转换时会有如下异常;

<span style="font-size:18px;">com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.jackson.bean.UserBean]: can not instantiate from JSON object (need to add/enable type information?)</span>

2.jackson数据转换工具类

<span style="font-size:18px;">package com.jackson.utils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; /**
* The class JacksonUtil
*
* json字符与对像转换
*
* @version: $Revision$ $Date$ $LastChangedBy$
*
*/
public final class JacksonUtil { public static ObjectMapper objectMapper; /**
* 使用泛型方法,把json字符串转换为相应的JavaBean对象。
* (1)转换为普通JavaBean:readValue(json,Student.class)
* (2)转换为List,如List<Student>,将第二个参数传递为Student
* [].class.然后使用Arrays.asList();方法把得到的数组转换为特定类型的List
*
* @param jsonStr
* @param valueType
* @return
*/
public static <T> T readValue(String jsonStr, Class<T> valueType) {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
} try {
return objectMapper.readValue(jsonStr, valueType);
} catch (Exception e) {
e.printStackTrace();
} return null;
} /**
* json数组转List
* @param jsonStr
* @param valueTypeRef
* @return
*/
public static <T> T readValue(String jsonStr, TypeReference<T> valueTypeRef){
if (objectMapper == null) {
objectMapper = new ObjectMapper();
} try {
return objectMapper.readValue(jsonStr, valueTypeRef);
} catch (Exception e) {
e.printStackTrace();
} return null;
} /**
* 把JavaBean转换为json字符串
*
* @param object
* @return
*/
public static String toJSon(Object object) {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
} try {
return objectMapper.writeValueAsString(object);
} catch (Exception e) {
e.printStackTrace();
} return null;
} }</span>

3.jackson数据转换具体实现

<span style="font-size:18px;">package com.jackson.main;

import java.util.ArrayList;
import java.util.List; import com.fasterxml.jackson.core.type.TypeReference;
import com.jackson.bean.DeptBean;
import com.jackson.bean.UserBean;
import com.jackson.utils.JacksonUtil; /**
* 实例实现利用jackson实现实体对象与json字符串的互相转换
* @author liangming.deng
*
*/
public class JacksonDemo {
public static void main(String[] args){ UserBean userBean1 = new UserBean(1, "liubei", "123", "liubei@163.com");
UserBean userBean2 = new UserBean(2, "guanyu", "123", "guanyu@163.com");
UserBean userBean3 = new UserBean(3, "zhangfei", "123", "zhangfei@163.com"); List<UserBean> userBeans = new ArrayList<>();
userBeans.add(userBean1);
userBeans.add(userBean2);
userBeans.add(userBean3); DeptBean deptBean = new DeptBean(1, "sanguo", userBeans);
//对象转json
String userBeanToJson = JacksonUtil.toJSon(userBean1);
String deptBeanToJson = JacksonUtil.toJSon(deptBean); System.out.println("deptBean to json:" + deptBeanToJson);
System.out.println("userBean to json:" + userBeanToJson); //json转字符串
UserBean jsonToUserBean = JacksonUtil.readValue(userBeanToJson, UserBean.class);
DeptBean jsonToDeptBean = JacksonUtil.readValue(deptBeanToJson, DeptBean.class); System.out.println("json to DeptBean" + jsonToDeptBean.toString());
System.out.println("json to UserBean" + jsonToUserBean.toString()); //List 转json字符串
String listToJson = JacksonUtil.toJSon(userBeans);
System.out.println("list to json:" + listToJson); //数组json转 List
List<UserBean> jsonToUserBeans = JacksonUtil.readValue(listToJson, new TypeReference<List<UserBean>>() {
});
String userBeanString = "";
for (UserBean userBean : jsonToUserBeans) {
userBeanString += userBean.toString() + "\n";
}
System.out.println("json to userBeans:" + userBeanString);
} }
</span>

输出结果:

<span style="font-size:18px;">deptBean to json:{"deptId":1,"deptName":"sanguo","userBeanList":[{"userId":1,"userName":"liubei","password":"123","email":"liubei@163.com"},{"userId":2,"userName":"guanyu","password":"123","email":"guanyu@163.com"},{"userId":3,"userName":"zhangfei","password":"123","email":"zhangfei@163.com"}]}
userBean to json:{"userId":1,"userName":"liubei","password":"123","email":"liubei@163.com"}
json to DeptBeanDeptBean [deptId=1, deptName=sanguo,
userBeanListString=UserBean [userId=1, userName=liubei, password=123, email=liubei@163.com]
UserBean [userId=2, userName=guanyu, password=123, email=guanyu@163.com]
UserBean [userId=3, userName=zhangfei, password=123, email=zhangfei@163.com]
]
json to UserBeanUserBean [userId=1, userName=liubei, password=123, email=liubei@163.com]
list to json:[{"userId":1,"userName":"liubei","password":"123","email":"liubei@163.com"},{"userId":2,"userName":"guanyu","password":"123","email":"guanyu@163.com"},{"userId":3,"userName":"zhangfei","password":"123","email":"zhangfei@163.com"}]
json to userBeans:UserBean [userId=1, userName=liubei, password=123, email=liubei@163.com]
UserBean [userId=2, userName=guanyu, password=123, email=guanyu@163.com]
UserBean [userId=3, userName=zhangfei, password=123, email=zhangfei@163.com]
</span>

三、带日期的实体对象与json转换

jackson实现带日期的实体对象与json转换有两种方法

1).将实体对象中的日期对象定义为String型,在使用的时候再将String型转换为Date型使用,其他就无需修改。

2).当实体对象中的日期对象定义为Date型,就需要通过集成JsonSerializer<Date>对象完成日期的转换,本段将重点讲解

1.在UserBean.java和DeptBean.java中分别添加Date createDate

<span style="font-size:18px;">	private Date createDate;
public Date getCreateDate() {
return createDate;
} public void setCreateDate(Date createDate) {
this.createDate = createDate;
}</span>

2.实现集成于JsonSerializer<Date>对象的工具类

<span style="font-size:18px;">package com.jackson.utils;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider; /**
* jackson日期转换工具类
*
* @author liangming.deng
*
*/
public class JsonDateFormatFull extends JsonSerializer<Date> { /**
* Jackson支持日期字符串格式
* "yyyy-MM-dd'T'HH:mm:ss.SSSZ" "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
* "EEE, dd MMM yyyy HH:mm:ss zzz" "yyyy-MM-dd"
*/
@Override
public void serialize(Date value, JsonGenerator jgen,
SerializerProvider provider) throws IOException, JsonProcessingException {
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss");
String formattedDate = formatter.format(value);
jgen.writeString(formattedDate); } }
</span>

3.在UserBean.java和DeptBean.java中Date变量加入如下注解

<span style="font-size:18px;">	@JsonSerialize(using = JsonDateFormateFull.class)
private Date createDate;</span>

4.jackson日期互转具体实现

<span style="font-size:18px;">package com.jackson.main;

import java.util.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; import com.fasterxml.jackson.core.type.TypeReference;
import com.jackson.bean.DeptBean;
import com.jackson.bean.UserBean;
import com.jackson.utils.JacksonUtil; /**
*利用jackson实现Json与实体对象的互转
* @author liangming.deng
*
*/
public class JacksonDemo {
public static void main(String[] args){ UserBean userBean1 = new UserBean(1, "liubei", "123", "liubei@163.com");
userBean1.setCreateDate(new Date(Calendar.getInstance().getTimeInMillis()));
UserBean userBean2 = new UserBean(2, "guanyu", "123", "guanyu@163.com");
userBean2.setCreateDate(new Date(Calendar.getInstance().getTimeInMillis()));
UserBean userBean3 = new UserBean(3, "zhangfei", "123", "zhangfei@163.com");
userBean3.setCreateDate(new Date(Calendar.getInstance().getTimeInMillis())); List<UserBean> userBeans = new ArrayList<>();
userBeans.add(userBean1);
userBeans.add(userBean2);
userBeans.add(userBean3); DeptBean deptBean = new DeptBean(1, "sanguo", userBeans);
deptBean.setCreateDate(new Date(Calendar.getInstance().getTimeInMillis()));
//实体对象 转json
String userBeanToJson = JacksonUtil.toJSon(userBean1);
String deptBeanToJson = JacksonUtil.toJSon(deptBean); System.out.println("deptBean to json:" + deptBeanToJson);
System.out.println("userBean to json:" + userBeanToJson); //json 转实体对象
UserBean jsonToUserBean = JacksonUtil.readValue(userBeanToJson, UserBean.class);
DeptBean jsonToDeptBean = JacksonUtil.readValue(deptBeanToJson, DeptBean.class); System.out.println("json to DeptBean" + jsonToDeptBean.toString());
System.out.println("json to UserBean" + jsonToUserBean.toString()); //List 转json
String listToJson = JacksonUtil.toJSon(userBeans);
System.out.println("list to json:" + listToJson); //json 转 List
List<UserBean> jsonToUserBeans = JacksonUtil.readValue(listToJson, new TypeReference<List<UserBean>>() {
});
String userBeanString = "";
for (UserBean userBean : jsonToUserBeans) {
userBeanString += userBean.toString() + "\n";
}
System.out.println("json to userBeans:" + userBeanString);
} }
</span>

5.结果输出

<span style="font-size:18px;">deptBean to json:{"deptId":1,"deptName":"sanguo","createDate":"2014-11-20T10:58:08","userBeanList":[{"userId":1,"userName":"liubei","password":"123","email":"liubei@163.com","createDate":"2014-11-20T10:58:08"},{"userId":2,"userName":"guanyu","password":"123","email":"guanyu@163.com","createDate":"2014-11-20T10:58:08"},{"userId":3,"userName":"zhangfei","password":"123","email":"zhangfei@163.com","createDate":"2014-11-20T10:58:08"}]}
userBean to json:{"userId":1,"userName":"liubei","password":"123","email":"liubei@163.com","createDate":"2014-11-20T10:58:08"}
json to DeptBeanDeptBean [deptId=1, deptName=sanguo,
userBeanListString=UserBean [userId=1, userName=liubei, password=123, email=liubei@163.com, createDate=Thu Nov 20 18:58:08 CST 2014]
UserBean [userId=2, userName=guanyu, password=123, email=guanyu@163.com, createDate=Thu Nov 20 18:58:08 CST 2014]
UserBean [userId=3, userName=zhangfei, password=123, email=zhangfei@163.com, createDate=Thu Nov 20 18:58:08 CST 2014]
]
json to UserBeanUserBean [userId=1, userName=liubei, password=123, email=liubei@163.com, createDate=Thu Nov 20 18:58:08 CST 2014]
list to json:[{"userId":1,"userName":"liubei","password":"123","email":"liubei@163.com","createDate":"2014-11-20T10:58:08"},{"userId":2,"userName":"guanyu","password":"123","email":"guanyu@163.com","createDate":"2014-11-20T10:58:08"},{"userId":3,"userName":"zhangfei","password":"123","email":"zhangfei@163.com","createDate":"2014-11-20T10:58:08"}]
json to userBeans:UserBean [userId=1, userName=liubei, password=123, email=liubei@163.com, createDate=Thu Nov 20 18:58:08 CST 2014]
UserBean [userId=2, userName=guanyu, password=123, email=guanyu@163.com, createDate=Thu Nov 20 18:58:08 CST 2014]
UserBean [userId=3, userName=zhangfei, password=123, email=zhangfei@163.com, createDate=Thu Nov 20 18:58:08 CST 2014]
</span>

以上为本博文的所有内容。

源码下载地址:http://download.csdn.net/detail/a123demi/8394327

Jackson实现Object对象与Json字符串的互转的更多相关文章

  1. java普通对象和json字符串的互转

    一.java普通对象和json字符串的互转 java对象---->json 首先创建一个java对象: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...

  2. JackSon将java对象转换为JSON字符串

    JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的writeValueA ...

  3. (后端)JackSon将java对象转换为JSON字符串(转)

    转载小金金金丶园友: JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的 ...

  4. 使用jackson对Java对象与JSON字符串相互转换的一些总结

    本文为菠萝大象原创,如要转载请注明出处.http://www.blogjava.net/bolo 代码无真相,为了最简单的说明,我直接上代码. public class User { private  ...

  5. json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化[转]

    网上查找“java json”,发现大家使用最多的还是json-lib来进行java对象的序列化成json对象和反序列化成java对象的操作.但是之前在网上也看到过一往篇关于json序列化性能比较的文 ...

  6. JavaScript对象、JSON对象、JSON字符串的区别

    一.首先看下什么是JSON JSON:JavaScript Object Natation,JavaScript对象的表现形式,已经发展成一种轻量级的数据交换格式. JavaScript对象的表现形式 ...

  7. json对象和json字符串有啥区别啊

    json对象可以通过javascript存取属性!json对象装成json字符串经常用于前后台传输数据! 如果你在前台使用,那么Json对象可以通过xx.name来调用,如果是字符串,那么就是字符串了 ...

  8. 【JS对象、JSON字符串】之间的相互转换

    在Firefox,chrome,opera,safari,ie9,ie8等浏览器直接可以用JSON对象的stringify()和parse()方法. 1.JSON.stringify(obj)将JS对 ...

  9. js 中 json对象 与 json字符串 间相互转换

    在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 JSON字符串:  var str1 = '{ " ...

随机推荐

  1. 再回首:object是什么

    前言 这里说得object是C#语言中的类型object,也是Framework中的System.Object(两者是一个意思).如其名“面向对象编程”对象就是Object.既然提到面向对象,自然就想 ...

  2. Windows下编程--模拟时钟的实现

    windows下编程--模拟时钟的实现: 主要可以分为几个步骤: (1)   编写按键事件处理(启动和停止时钟) (2)   编写时钟事件处理,调用显示时钟函数 (3)   编写显示时钟函数,要调用显 ...

  3. Spring MVC 数据绑定流程分析

    1.    数据绑定流程原理★ ①   Spring MVC 主框架将 ServletRequest  对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 Data ...

  4. 你所需要的sql数据库资料

     sql语法的特点  1.没有"",所有的字符串都使用''包含  2.它的逻辑相等与赋值运算符一样都是= 如 if 1=1  3.不区别大小写,但是习惯函数上使用大写.所有与数据库 ...

  5. [javaSE] 多线程(守护线程)

    我们一般使用多线程,都是while的死循环,想要结束线程,只需退出死循环即可 当线程中调用了sleep()方法或者wait()方法,当前的线程就会进入冻结状态,这个线程就结束不了 调用Thread对象 ...

  6. 十六、Condition等待通知

    一.简介 我们可以使用syncronized和wait,notify实现等待通知.而syncronized的高级实现Lock,也可以实现等待通知,需要构造Condition的实例对象. JDK文档:h ...

  7. 【转】golang的channel的几种用法

    关闭2次 ch := make(chan bool) close(ch) close(ch)  // 这样会panic的,channel不能close两次 读取的时候channel提前关闭了 ch : ...

  8. IDEA 如何加上 tomcat

    前言: idea 上已经有一个 tomcat 了,因为这个 tomcat 为 32 的,需要加一个 64 为的 tomcat . 第一步: 第二步: 第三步: 点击 OK 就好. 结果:

  9. BZOJ3812: 主旋律

    传送门 Sol 考虑容斥 强联通图反过来就是一些缩点后的 \(DAG\) 一个套路就是对出(入)度为 \(0\) 的点进行容斥 设 \(g_S,h_S\) 分别表示选了奇数个 \(0\) 入度和偶数个 ...

  10. 理解webpack4.splitChunks

    一.前言 之前一直也没有研究过webpack4是基于怎样的规则去拆分模块的,现在正好有时间打算好好了解一下,看了官方文档也陆陆续续的看了看网上别人写的文章,感觉大部分都是将官方文档翻译了一遍,很多问题 ...