《JSON笔记之二》----封装JSONUtil
许多java开发人员对于fastjson再也熟悉不过了,这是alibaba开源的依赖,使用fastjson可以使我们很容易的把请求json串转换成为我们所需要的对象、list、map等对象格式,对于开发带来了很多的遍历,具体的详细操作就不详细介绍了。
下面进入我们的正题,最近开发项目和学习中封装了一个JSONUtil类,使用也挺方便,所以就给大家分享一下吧!
package cn.itwx.mybatis.common; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
//import com.sun.istack.internal.Nullable;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.lang.Nullable; import java.io.IOException;
import java.util.List;
import java.util.Map; /**
* @author: wx
* @create: 2018-04-24 17:20
**/
public class JsonUtils { public static final ObjectMapper mapper = new ObjectMapper(); private static final Logger logger = LoggerFactory.getLogger(JsonUtils.class); /**
* 将对象转换成json格式
* @param obj
* @return
*/
@Nullable
public static String serialize(Object obj) {
if (obj == null) {
return null;
}
if (obj.getClass() == String.class) {
return (String) obj;
}
try {
return mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
logger.error("json序列化出错:" + obj, e);
return null;
}
} /**
* 将json转换成对象的格式
* @param json
* @param tClass
* @param <T>
* @return
*/
@Nullable
public static <T> T parse(String json, Class<T> tClass) {
try {
return mapper.readValue(json, tClass);
} catch (IOException e) {
logger.error("json解析出错:" + json, e);
return null;
}
} /**
* 将一个json转换成list
* @param json
* @param eClass
* @param <E>
* @return
*/
@Nullable
public static <E> List<E> parseList(String json, Class<E> eClass) {
try {
return mapper.readValue(json, mapper.getTypeFactory().constructCollectionType(List.class, eClass));
} catch (IOException e) {
logger.error("json解析出错:" + json, e);
return null;
}
} /**
* 将json解析成map
* @param json
* @param kClass
* @param vClass
* @param <K>
* @param <V>
* @return
*/
@Nullable
public static <K, V> Map<K, V> parseMap(String json, Class<K> kClass, Class<V> vClass) {
try {
return mapper.readValue(json, mapper.getTypeFactory().constructMapType(Map.class, kClass, vClass));
} catch (IOException e) {
logger.error("json解析出错:" + json, e);
return null;
}
} /**
* 解析复杂类型的json串,适用以上所有的格式
* @param json
* @param type
* @param <T>
* @return
*/
@Nullable
public static <T> T nativeRead(String json, TypeReference<T> type) {
try {
return mapper.readValue(json, type);
} catch (IOException e) {
logger.error("json解析出错:" + json, e);
return null;
}
}
}
2、为了验证json解析格式是否正确,所以我专门在这个类里面定义一个内部类和方法验证,附上源代码,有兴趣的小伙伴们可以亲自操作一下。
对于这段代码中可能会有小伙伴对于@Data、@Nullable\@NoArgsConstructor等注解会感到困惑,这些事lombok的注解方式,有兴趣或者技术大佬可以下面留言大家一些说下他的用法,这里小编先不叙述了,等待详解哦
public class JsonUtils { ......//省去上面的封装方法 //内部类
@Data //次注解可以省去类中的set\get方法
@NoArgsConstructor//注解无参构造
@AllArgsConstructor//有参构造
static class User{
String name;
int age;
}
//定义的主方法
public static void main(String[] args) {
User user = new User("lisi",23);
//json序列化:将对象转换为json串
String json = serialize(user);
System.out.println("json="+json); //json反序列化:将json串转换成对象
User parse = parse(json, User.class);
System.out.println("user=" + parse); //将json转换成对象list
String json = "[12,23,63,64]";
List<Integer> integers = parseList(json, Integer.class);
System.out.println("list="+integers);
String userJson = "[{\"name\":\"lisi\",\"age\":21},{\"name\":\"ahua\",\"age\":32},{\"name\":\"llk\",\"age\":23}]";
//自定义JOSNUtil工具类
List<User> users = parseList(userJson, User.class);
System.out.println("users=" + users);
//使用JSON类
List<User> userList = JSON.parseArray(userJson, User.class);
System.out.println("userList =" + userList);
//使用JSON的子类,JSONArray
List<User> list = JSONArray.parseArray(userJson, User.class);
System.out.println("List = "+ list); //将json转换成map
//language=JSON
String json = "{\"name\":\"Jack\",\"age\":\"23\"}";
Map<String, String> map = parseMap(json, String.class, String.class);
System.out.println("map:"+map); //json串为map复杂类型
//language=JSON
String json = "[{\"name\":\"ROSE\",\"age\":\"32\"},{\"name\":\"jack\",\"sex\":\"m\"}]";
List<Map<String, String>> maps = nativeRead(json, new TypeReference<List<Map<String, String>>>() {
});//匿名内部类 //循环List
for (Map<String ,String> map : maps){
System.out.println("map="+map);
}
}
细心的小伙伴们可能会发现我同时用了fastjson去解析串,目的就是验证这个工具类是否解析的格式有问题,所以有疑问或者有问题的伙伴们及时沟通哈!
《JSON笔记之二》----封装JSONUtil的更多相关文章
- Directx11学习笔记【二十一】 封装键盘鼠标响应类
原文:Directx11学习笔记[二十一] 封装键盘鼠标响应类 摘要: 本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/ ...
- 《Data-Intensive Text Processing with mapReduce》读书笔记之二:mapreduce编程、框架及运行
搜狐视频的屌丝男士第二季大结局了,惊现波多野老师,怀揣着无比鸡冻的心情啊,可惜随着剧情的推进发展,并没有出现期待中的屌丝奇遇,大鹏还是没敢冲破尺度的界线.想百度些种子吧,又不想让电脑留下污点证据,要知 ...
- 《C++游戏开发》笔记十二 战争迷雾:初步实现
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9475979 作者:七十一雾央 新浪微博:http:/ ...
- [.NET] 《Effective C#》读书笔记(二)- .NET 资源托管
<Effective C#>读书笔记(二)- .NET 资源托管 简介 续 <Effective C#>读书笔记(一)- C# 语言习惯. .NET 中,GC 会帮助我们管理内 ...
- strut2-学习笔记(二)
Struts2学习笔记(二) 1. 自定义结果视图的类型(结果视图类型的应用) CAPTCHA图像(随机验证码图像) 实现步骤: (1)编写一个类实现com.opensymphony.xwork ...
- [.NET] 《Effective C#》快速笔记(二)- .NET 资源托管
<Effective C#>快速笔记(二)- .NET 资源托管 简介 续 <Effective C#>读书笔记(一)- C# 语言习惯. .NET 中,GC 会帮助我们管理内 ...
- Apollo源码阅读笔记(二)
Apollo源码阅读笔记(二) 前面 分析了apollo配置设置到Spring的environment的过程,此文继续PropertySourcesProcessor.postProcessBeanF ...
- WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]
WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...
- 《C++标准程序库》笔记之二
<C++标准程序库>笔记之二 本篇博客笔记顺序大体按照<C++标准程序库(第1版)>各章节顺序编排. ------------------------------------- ...
随机推荐
- 导出CSV
public FileResult ExportExcel() { var sbHtml = new StringBuilder(); sbHtml.Append("<table bo ...
- VMWare 9 安装 win8
http://tieba.baidu.com/p/1954912175 http://down.51cto.com/data/497803 win8专业版:NBCCB-JJJDX-PKBKJ-KQX8 ...
- jsp smartupload学习
smartupload 是jsp中用于上传文件的组件, 其特点如下: 1.使用简单.在JSP文件中仅仅书写三五行java代码就可以搞定文件的上传或下载,方便. 2.能全程控制上传.利用jspSmart ...
- DO、PO、BO、DTO、VO等概念
PO 全称为:Persistant Object,持久化对象,与数据库结构映射的实体,数据库中的一条数据即为一个 PO 对象. BO 全称为:Business Object,业务对象,主要作用是把业务 ...
- WinRAR(WinZip)压缩与解压实现(C#版Window平台)
本文的原理是借助Windows平台安装的WinRAR(WinZip)实现C#程序的调用(注:WinRAR压缩解压WinZip同样适用). 先来看WinRAR(WinZip)自身的支持调用命令: 压缩命 ...
- Prestashop-1.6.1.6-zh_CN (Openlogic CentOS 7.2)
平台: CentOS 类型: 虚拟机镜像 软件包: prestashop1.6.1.6 commercial content management ecommerce open-source 简体中文 ...
- c++ stl sort example
c++ stl sort函数使用举例: #include <iostream> #include<vector> #include<algorithm> #incl ...
- 浏览器-http协议简介
HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...
- centos7 安装sqlserver驱动以及扩展
安装sqlserver驱动 sudo su curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repo ...
- aaS软件的必要特征分析,一定是多租户特性吗
本篇文章讲述了SaaS软件的必要特征一定是多租户特性?对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买.构建和维护基础设施和应用程序的需要 课课家教育平台提醒各位:本篇文章纯干 ...