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

一.准备

如果你需要使用jackson,你必须得导入相应的架包,有如下三个包jackson-annotations;jackson-core;jackson-databind。

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

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

package com.bijian.study;  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();  }
}  
package com.bijian.study;  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();  }
}  

2.jackson数据转换工具类

package com.bijian.study;  import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;  /** * The class JacksonUtil * 使用泛型方法,把json字符串转换为相应的JavaBean对象。 * (1)转换为普通JavaBean:readValue(json,Student.class) * (2)转换为List,如List<Student>,将第二个参数传递为Student[].class.然后使用Arrays.asList();方法把得到的数组转换为特定类型的List * * json字符与对像转换 */
public final class JacksonUtil {  public static ObjectMapper objectMapper;  /** * json对象转JAVA对象 *  * @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;  }
}

3.jackson数据转换具体实现

package com.bijian.study;  import java.util.ArrayList;
import java.util.List;  import com.fasterxml.jackson.core.type.TypeReference;  /** * 实例实现利用jackson实现实体对象与json字符串的互相转换 */
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);  }
}  

运行结果:

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 DeptBean:DeptBean [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 UserBean:UserBean [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]  

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

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

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

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

1.在UserBean.java和DeptBean.java中分别添加Date createDate,并加上@JsonSerialize(using = JsonDateFormatFull.class)注解

package com.bijian.study;  import java.util.Date;  import com.fasterxml.jackson.databind.annotation.JsonSerialize;  public class UserBean {  private int userId;  private String userName;  private String password;  private String email;  @JsonSerialize(using = JsonDateFormatFull.class)  private Date createDate;  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;  }  public Date getCreateDate() {  return createDate;  }  public void setCreateDate(Date createDate) {  this.createDate = createDate;  }  @Override  public String toString() {  return "UserBean [userId=" + userId + ", userName=" + userName + ", password=" + password + ", email=" + email + ", createDate=" + createDate  + "]";  }  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();  }
}  
package com.bijian.study;  import java.util.Date;
import java.util.List;  import com.fasterxml.jackson.databind.annotation.JsonSerialize;  public class DeptBean {  private int deptId;  private String deptName;  @JsonSerialize(using = JsonDateFormatFull.class)  private Date createDate;  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 Date getCreateDate() {  return createDate;  }  public void setCreateDate(Date createDate) {  this.createDate = createDate;  }  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 + ", createDate=" + createDate + ", \nuserBeanListString=" + userBeanListString  + "]";  }  public DeptBean(int deptId, String deptName, List<UserBean> userBeanList) {  super();  this.deptId = deptId;  this.deptName = deptName;  this.userBeanList = userBeanList;  }  public DeptBean() {  super();  }
}  

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

package com.bijian.study;  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日期转换工具类 */
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);  }
}  

3.jackson日期互转具体实现

package com.bijian.study;  import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;  import com.fasterxml.jackson.core.type.TypeReference;  /** * 利用jackson实现Json与实体对象的互转 */
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);  }
}  

运行结果:

deptBean to json:{"deptId":1,"deptName":"sanguo","createDate":"2016-07-11T23:53:46","userBeanList":[{"userId":1,"userName":"liubei","password":"123","email":"liubei@163.com","createDate":"2016-07-11T23:53:46"},{"userId":2,"userName":"guanyu","password":"123","email":"guanyu@163.com","createDate":"2016-07-11T23:53:46"},{"userId":3,"userName":"zhangfei","password":"123","email":"zhangfei@163.com","createDate":"2016-07-11T23:53:46"}]}
userBean to json:{"userId":1,"userName":"liubei","password":"123","email":"liubei@163.com","createDate":"2016-07-11T23:53:46"}
json to DeptBean:DeptBean [deptId=1, deptName=sanguo, createDate=Tue Jul 12 07:53:46 CST 2016,
userBeanListString=UserBean [userId=1, userName=liubei, password=123, email=liubei@163.com, createDate=Tue Jul 12 07:53:46 CST 2016]
UserBean [userId=2, userName=guanyu, password=123, email=guanyu@163.com, createDate=Tue Jul 12 07:53:46 CST 2016]
UserBean [userId=3, userName=zhangfei, password=123, email=zhangfei@163.com, createDate=Tue Jul 12 07:53:46 CST 2016]
]
json to UserBean:UserBean [userId=1, userName=liubei, password=123, email=liubei@163.com, createDate=Tue Jul 12 07:53:46 CST 2016]
list to json:[{"userId":1,"userName":"liubei","password":"123","email":"liubei@163.com","createDate":"2016-07-11T23:53:46"},{"userId":2,"userName":"guanyu","password":"123","email":"guanyu@163.com","createDate":"2016-07-11T23:53:46"},{"userId":3,"userName":"zhangfei","password":"123","email":"zhangfei@163.com","createDate":"2016-07-11T23:53:46"}]
json to userBeans:UserBean [userId=1, userName=liubei, password=123, email=liubei@163.com, createDate=Tue Jul 12 07:53:46 CST 2016]
UserBean [userId=2, userName=guanyu, password=123, email=guanyu@163.com, createDate=Tue Jul 12 07:53:46 CST 2016]
UserBean [userId=3, userName=zhangfei, password=123, email=zhangfei@163.com, createDate=Tue Jul 12 07:53:46 CST 2016]  

Jsckson 实现 java 对象与 JSONObject 和 JSONArray 互转相关推荐

  1. java对象转JSONObject

    首先导包  两个 import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; 转化 Gson g = new Gson() ...

  2. Json-lib, 实现Java对象与JSON数据格式的互转

    Json-lib 是什么? 官方解释是:JSON-lib is a java library for transforming beans, maps, collections, java array ...

  3. 【实用】Java对象与JSON字符串的互转,实用操作!

    最近,工作中会涉及到Java对象与JSON字符串相互转换,虽然说并不难,但打算还是梳理一番,主要内容有: JSON 字符串 转 普通对象 普通对象 转 JSON 字符串 JSON 字符串数组 转 Li ...

  4. java对象转JSONObject、JSONObject转java对象及String转JSONObject

    JSONObject jo= (JSONObject) JSONObject.toJSON(javaBean); Student stu = JSONObject.parseObject(jo, St ...

  5. Java 对象 、String 、JSON 互转

    一.引入依赖 <dependency><groupId>org.json</groupId><artifactId>json</artifactI ...

  6. 对象转数组_fastJson中java对象 jsonObject jsonArray之间转换

    一.介绍 简介:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 二.使用 1.java对象转jsonObject User u = new User(); ...

  7. java json字符串转JSONObject对象、转JAVA对象、转List<T>对象

    String jsonData = ""; //json格式的字符串JSONObject jsonObj = JSONObject.parseObject(jsonData);// ...

  8. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  9. Java中普通字符串转json_java普通对象和json字符串的互转

    一.java普通对象和json字符串的互转 java对象---->json 首先创建一个java对象: 现在java对象转换为json形式: 定义了一个Student的实体类,然后分别使用了JS ...

  10. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

最新文章

  1. Qt之QFutureWatcher
  2. [转载]:TRY...CATCH (Transact-SQL)
  3. nmake构建Geos库
  4. 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )
  5. 改性沥青弹性恢复计算_阿里云计算的发展现状是什么,主要的产品有哪些?
  6. 腾讯计费:助力游戏千亿级营收,覆盖180多个国家
  7. 静态分析:IDA逆向代码段说明 text、idata、rdata、data
  8. java new一个对象的过程中发生了什么
  9. Qt中多个动态创建的按钮同时绑定一个槽函数,判断被点击的是哪个按钮
  10. 信息技术《用计算机做科学实验,综合实践活动初中综合实践活动7-9年级《信息技术 8.用计算机做科学实验》公开课教学设计...
  11. asp.net core系列 67 Web压力测试工具WCAT
  12. 别找了,你要的中国民间神话故事在这里!
  13. mysql connector读后记
  14. 【雷达通信】基于mtatlab距离多普勒(RD)、CS、RM算法机载雷达成像【含Matlab源码 284期】
  15. 开源、绿色,解压即可运行的数据库连接工具推荐
  16. 怎样控制小程序tabbar图标大小_微信小程序tabBar的基本设置-微信小程序tabbar字体大小-微信小程序tabbar高度...
  17. MFC对磁盘测速工具CrystalDiskMark6_0_0的工厂方式控制源代码 同时控制 8个窗口,界面同步显示,比较完整点的版本
  18. Activity焦点
  19. Ubuntu系统下搭建C/C++ gcc开发环境
  20. linux 命令是什么的缩写,Linux一部分命令解释(命令缩写代表什么意思)

热门文章

  1. 圣多米尼克高中有计算机课吗,院校库_VPEA北美留学院校数据查询中心
  2. [window] win7系统下电脑声音正常,右下角的小喇叭图标不见了
  3. 【TensorFlow】【数字货币】【单词记忆】【微信运营】【DIY电脑】 | Chat · 预告
  4. 程序员的职业危机是什么?一个12年互联网人的4点思考
  5. 使用python绘制一个太阳花代码_如何绘制多样化的太阳花?
  6. python 小海龟 教案_幼儿园小班健康活动《勇敢的小海龟》教案
  7. editplus配置python_Editplus配置Python的开发环境
  8. EditPlus 使用 json 格式化
  9. wps可以用来学计算机考试吗,国产软件WPS成全国计算机二级考试科目,你确定不来学点编程...
  10. 带t2芯片的mac装linux,制作macOS系统盘超级简单,以及T2芯片的安装方法