Jackson实现Object对象与Json字符串的互转
来源:互联网 发布:软件杯比赛规则 编辑:程序博客网 时间:2024/04/30 08:44
在项目开发过程中,当客户端与服务器响应时,数据交互是必不可少的。然而通过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;}@Overridepublic 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;}@Overridepublic 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);//对象转jsonString 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转 ListList<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" */@Overridepublic void serialize(Date value, JsonGenerator jgen,SerializerProvider provider) throwsIOException, 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()));//实体对象 转jsonString 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 转jsonString listToJson = JacksonUtil.toJSon(userBeans);System.out.println("list to json:" + listToJson);//json 转 ListList<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
1 0
- Jackson实现Object对象与Json字符串的互转
- Jackson实现Object对象与Json字符串的互转
- Jackson实现Object对象与Json字符串的互转
- Jackson实现Object对象与Json字符串的互转
- Jackson实现Object对象与Json字符串的互转
- Jackson实现Object对象与Json字符串的互转
- Jackson实现Object对象与Json字符串的互转
- springmvc之Jackson实现po对象与Json字符串的互转
- jackson实现Java对象与json的互转
- JSON解析类库之Jackson(1) --- Jackson类库学习, 生成与解析json数据,json字符串与Java对象互转
- com.fasterxml.jackson.databind.ObjectMapper:可将object与json互转的工具
- 使用jackson的ObjectMapper json转object
- jackson 与复杂对象的json转换
- json字符串与Object对象间的转换
- 简单封装Jackson,实现JSON String<->Java Object的Mapper.
- 使用jackson对Java对象与JSON字符串相互转换
- Jackson(一):java对象与json字符串互相转换
- Jackson实现json与java的转化
- 关于syslogd与klogd
- C++ 语言知识汇集
- Binary Tree Level Order Traversal
- CodeForces - 348A
- 最简单的栈问题
- Jackson实现Object对象与Json字符串的互转
- WOJ-1100
- java多线程总结
- android中listView下拉刷新
- Android Studio 离线安装 Gradle 的方法
- 安装配置Hadoop的各个配置文件修改的地方以及修改的内容
- 每个程序猿都有一个源码梦
- TCP/IP卷一 RARP协议
- Unity3D基础--常用的GUI控件