com.fasterxml.jackson工具类
老版本的Jackson使用的包名为org.codehaus.jackson,而新版本使用的是com.fasterxml.jackson。
Jackson主要包含了3个模块:
- jackson-core
- jackson-annotations
- jackson-databind
其中,jackson-annotations依赖于jackson-core,jackson-databind又依赖于jackson-annotations。
Jackson有三种方式处理Json:
- 使用底层的基于Stream的方式对Json的每一个小的组成部分进行控制
- 使用Tree Model,通过JsonNode处理单个Json节点
- 使用databind模块,直接对Java对象进行序列化和反序列化
通常来说,我们在日常开发中使用的是第3种方式,有时为了简便也会使用第2种方式,比如你要从一个很大的Json对象中只读取那么一两个字段的时候,采用databind方式显得有些重,JsonNode反而更简单。
package founder.util; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper; /**
* @ClassName: JsonUtils
* @author hanwl
* @date 2019年01月22日
* @Description: TODO
*/
public class JsonUtils { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); /**
* Json格式的字符串向JavaBean转换,传入空串将返回null
* @param strBody Json格式的字符串
* @param c 目标JavaBean类型
* @return JavaBean对象
* @throws JsonParseException
* @throws JsonMappingException
* @throws IOException
*/
public static <T> T json2Object(String strBody, Class<T> c) throws JsonParseException, JsonMappingException, IOException{
if (strBody == null || "".equals(strBody)) {
return null;
}
else {
return OBJECT_MAPPER.readValue(strBody, c);
}
} /**
* Json格式的字符串向JavaBean转换,传入空串将返回null
* @param strBody Json格式的字符串
* @param c 目标JavaBean类型
* @return JavaBean对象, 如果解析失败返回 null
*/
public static <T> T decodeJson(String strBody, Class<T> c) {
if (strBody == null || "".equals(strBody)) {
return null;
}
else {
try {
return OBJECT_MAPPER.readValue(strBody, c);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
} /**
*
* @param strBody
* @param c
* @return
* @throws JsonParseException
* @throws JsonMappingException
* @throws IOException
*/
public static Object json2ComplexObject(String strBody) throws JsonParseException, JsonMappingException, IOException{
if (strBody == null || "".equals(strBody)) {
return null;
}
else {
// 每个属性的实际类型是string
return OBJECT_MAPPER.readValue(strBody, Object.class);
}
} /**
* Json格式的字符串向JavaBean List集合转换,传入空串将返回null
* @param strBody
* @param c
* @return
* @throws JsonParseException
* @throws JsonMappingException
* @throws IOException
*/
@SuppressWarnings("unchecked")
public static <T> List<T> json2ObjectList(String strBody,Class<T> c) throws JsonParseException, JsonMappingException, IOException{
if (strBody == null || "".equals(strBody)) {
return null;
}
else {
JavaType javaType = OBJECT_MAPPER.getTypeFactory().constructParametricType(ArrayList.class, c);
return (List<T>) OBJECT_MAPPER.readValue(strBody, javaType);
}
} /**
* Json格式的字符串向JavaBean List集合转换,传入空串将返回null
* @param strBody
* @param c
* @return 对象列表,解析失败返回 null
*/
@SuppressWarnings("unchecked")
public static <T> List<T> decodeJsonToList(String strBody,Class<T> c) {
if (strBody == null || "".equals(strBody)) {
return null;
}
else {
JavaType javaType = OBJECT_MAPPER.getTypeFactory().constructParametricType(ArrayList.class, c);
try {
return (List<T>) OBJECT_MAPPER.readValue(strBody, javaType);
} catch (IOException e) {
e.printStackTrace(); return null;
}
}
} /**
* Json格式的字符串向List<String>集合转换,传入空串将返回null
* @param strBody
* @return
* @throws JsonParseException
* @throws JsonMappingException
* @throws IOException
*/
public static List<String> json2List(String strBody) throws JsonParseException, JsonMappingException, IOException{
return json2ObjectList(strBody, String.class);
} /**
* Object转为Json格式字符串的方法
* @param o
* @return
* @throws JsonProcessingException
*/
public static String object2Json(Object o) throws JsonProcessingException{
return OBJECT_MAPPER.writeValueAsString(o);
} /**
* Object转为Json格式字符串的方法
* @param o
* @return 对象的json字符串,如果处理过程中出错,返回null
*/
public static String encodeObject(Object o) {
try {
return OBJECT_MAPPER.writeValueAsString(o);
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}
}
com.fasterxml.jackson工具类的更多相关文章
- Java json工具类,jackson工具类,ObjectMapper工具类
Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...
- jackson工具类 对象转字符串 -- 字符串转对象
这个一个json的工具类.用的是jackson,当然还有谷歌的gosn,阿里的fastjson ,但是jackson的感觉还是最成熟(网上大神说的...) 实现的功能很简单,对象转字符串 字符串转简 ...
- Jackson 工具类使用及配置指南
目录 前言 Jackson使用工具类 Jackson配置属性 Jackson解析JSON数据 Jackson序列化Java对象 前言 Json数据格式这两年发展的很快,其声称相对XML格式有很对好处: ...
- 使用jackson工具类把对象或集合转为JSON格式
jackson使用方法: 1.加入jar包: jackson-annotations-2.2.2.jar jackson-core-2.2.2.jar jackson-databind-2.2.2.j ...
- Jackson工具类使用及配置指南、高性能配置(转)
Jackson使用工具类 通常,我们对JSON格式的数据,只会进行解析和封装两种,也就是JSON字符串--->Java对象以及Java对象--->JSON字符串. public class ...
- Jackson工具类(各种转换)
首先要在项目中引入jackson的jar包(在此不做说明) 下面直接上代码 public class JacksonUtils { private final static ObjectMapper ...
- jackson工具类有动态属性过虑功能
在业务应用中经常会有指定属性序列化json的需求,C#中这个功能很容易就可以解决:使用lambda重新构造一下匿名对象就可以了.一行代码搞定.java是这样解决的. public JsonMapper ...
- 用jackson封装的JSON工具类
package hjp.smart4j.framework.util; import com.fasterxml.jackson.databind.ObjectMapper; import org.s ...
- Jackson 对象与json数据互转工具类JacksonUtil
1,User对象 package com.st.json; import java.util.Date; /** * @Description: JSON序列化和反序列化使用的User类 * @aut ...
随机推荐
- Unity 2D 效应器与来回移动的实现
1.效应器 Point Effector 2D: 点效应器.进入区域,吸引或排斥物体 Area Effector 2D: 区域效应器,可以用来做马里奥的管道移动效果 Surface Effector ...
- 【Java】itext根据模板生成pdf(包括图片和表格)
1.导入需要的jar包:itext-asian-5.2.0.jar itextpdf-5.5.11.jar. 2.新建word文档,创建模板,将文件另存为pdf,并用Adobe Acrobat DC打 ...
- 查看CPU使用率
rem 如果wmi服务(服务名为Winmgmt)坏掉了,需要到system32\webm目录下执行如下注释的命令 rem for %i in (*.dll) do RegSvr32 -s %i rem ...
- java获取机器IP地址常用方法
private String getHostIP(){ Enumeration<NetworkInterface> allNetInterfaces = null; String resu ...
- Linux(Manjaro) -Docker 安装及基本配置
Linux(Manjaro) -Docker 安装及基本配置 基本安装 # Pacman 安装 Docker sudo pacman -S docker # 启动docker服务 sudo syste ...
- java有关 String char 常见问题 编辑中
1 输入输出有关 Scanner 的next()方法 返回值是String 所以尝试获得char时 应该用input.next().charAt[0] 2 空值 String 中null是指 对象引用 ...
- DOM中获取宽高、位置总结
原生JS 一.文档.窗口的宽高和位置 // 获取屏幕的宽高 window.screen.height | window.screen.width // 屏幕可用工作区宽高 window.screen. ...
- Day9 轨道角动量
转自中山大学电子与信息工程 http://seit.sysu.edu.cn/node/1004 能量.动量(角动量和线动量)光子的基本属性,其中光子角动量包括自旋角动量和轨道角动量(Orbital a ...
- 纯手工搭建VS 2017(社区 免费版)离线安装包
不知不觉中,史上功能最强大的Visual Studio 2017版本发于美国时间2017年3月8日正式在发布了,但是由于版本更新速度加快和与第三方工具包集成的原因,微软研发团队没有为这个版本提供离线下 ...
- beanshell断言模版
if("${createTime_1}".equals("${createTime_2}")){ Failure = false; FailureMessage ...