Jsckson 实现 java 对象与 JSONObject 和 JSONArray 互转
在项目开发过程中,当客户端与服务器响应时,数据交互是必不可少的。然而通过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 互转相关推荐
- java对象转JSONObject
首先导包 两个 import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; 转化 Gson g = new Gson() ...
- Json-lib, 实现Java对象与JSON数据格式的互转
Json-lib 是什么? 官方解释是:JSON-lib is a java library for transforming beans, maps, collections, java array ...
- 【实用】Java对象与JSON字符串的互转,实用操作!
最近,工作中会涉及到Java对象与JSON字符串相互转换,虽然说并不难,但打算还是梳理一番,主要内容有: JSON 字符串 转 普通对象 普通对象 转 JSON 字符串 JSON 字符串数组 转 Li ...
- java对象转JSONObject、JSONObject转java对象及String转JSONObject
JSONObject jo= (JSONObject) JSONObject.toJSON(javaBean); Student stu = JSONObject.parseObject(jo, St ...
- Java 对象 、String 、JSON 互转
一.引入依赖 <dependency><groupId>org.json</groupId><artifactId>json</artifactI ...
- 对象转数组_fastJson中java对象 jsonObject jsonArray之间转换
一.介绍 简介:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 二.使用 1.java对象转jsonObject User u = new User(); ...
- java json字符串转JSONObject对象、转JAVA对象、转List<T>对象
String jsonData = ""; //json格式的字符串JSONObject jsonObj = JSONObject.parseObject(jsonData);// ...
- java中将json字符串_Java中JSON字符串与java对象的互换实例详解
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- Java中普通字符串转json_java普通对象和json字符串的互转
一.java普通对象和json字符串的互转 java对象---->json 首先创建一个java对象: 现在java对象转换为json形式: 定义了一个Student的实体类,然后分别使用了JS ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
最新文章
- Qt之QFutureWatcher
- [转载]:TRY...CATCH (Transact-SQL)
- nmake构建Geos库
- 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )
- 改性沥青弹性恢复计算_阿里云计算的发展现状是什么,主要的产品有哪些?
- 腾讯计费:助力游戏千亿级营收,覆盖180多个国家
- 静态分析:IDA逆向代码段说明 text、idata、rdata、data
- java new一个对象的过程中发生了什么
- Qt中多个动态创建的按钮同时绑定一个槽函数,判断被点击的是哪个按钮
- 信息技术《用计算机做科学实验,综合实践活动初中综合实践活动7-9年级《信息技术 8.用计算机做科学实验》公开课教学设计...
- asp.net core系列 67 Web压力测试工具WCAT
- 别找了,你要的中国民间神话故事在这里!
- mysql connector读后记
- 【雷达通信】基于mtatlab距离多普勒(RD)、CS、RM算法机载雷达成像【含Matlab源码 284期】
- 开源、绿色,解压即可运行的数据库连接工具推荐
- 怎样控制小程序tabbar图标大小_微信小程序tabBar的基本设置-微信小程序tabbar字体大小-微信小程序tabbar高度...
- MFC对磁盘测速工具CrystalDiskMark6_0_0的工厂方式控制源代码 同时控制 8个窗口,界面同步显示,比较完整点的版本
- Activity焦点
- Ubuntu系统下搭建C/C++ gcc开发环境
- linux 命令是什么的缩写,Linux一部分命令解释(命令缩写代表什么意思)
热门文章
- 圣多米尼克高中有计算机课吗,院校库_VPEA北美留学院校数据查询中心
- [window] win7系统下电脑声音正常,右下角的小喇叭图标不见了
- 【TensorFlow】【数字货币】【单词记忆】【微信运营】【DIY电脑】 | Chat · 预告
- 程序员的职业危机是什么?一个12年互联网人的4点思考
- 使用python绘制一个太阳花代码_如何绘制多样化的太阳花?
- python 小海龟 教案_幼儿园小班健康活动《勇敢的小海龟》教案
- editplus配置python_Editplus配置Python的开发环境
- EditPlus 使用 json 格式化
- wps可以用来学计算机考试吗,国产软件WPS成全国计算机二级考试科目,你确定不来学点编程...
- 带t2芯片的mac装linux,制作macOS系统盘超级简单,以及T2芯片的安装方法