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 ...
随机推荐
- Android远程桌面助手(B1185)for Android P开发者预览版
Android P的开发者预览版已出,其中App compatibility changes部分特别强调“The platform restricts the use of some non-SDK ...
- Python之函数参数
# -*- coding: utf-8 -*- """ Created on Fri Sep 7 09:13:50 2018 @author: zhen "&q ...
- kali权限提升之本地提权
kali权限提升之本地提权 系统账号之间权限隔离 操作系统的安全基础 用户空间 内核空间 系统账号: 用户账号登陆时候获取权限令牌 服务账号无需用户登录已在后台启动服务 windows用户全权限划分: ...
- Jenkins 使用Tfs 插件出现 MappingConflictException 错误问题解决
FATAL: com.microsoft.tfs.core.clients.versioncontrol.exceptions.MappingConflictException: The path C ...
- Docker平台的基本使用方法
1.运行一个 container并加载镜像centos,运行起来这个实例后,在实例中执行 /bin/bash命令 docker常用参数: run 运行 -i 以交互模式运行容器,通常与 -t 同时 ...
- 记一次CPU飙升BUG
图文地址:https://mp.weixin.qq.com/s?__biz=Mzg3NjEzODQ4NQ==&mid=2247483690&idx=1&sn=7c926f400 ...
- 云计算openstack共享组件(1)——时间同步服务ntp
一.标准时间讲解 地球分为东西十二个区域,共计 24 个时区 格林威治作为全球标准时间即 (GMT 时间 ),东时区以格林威治时区进行加,而西时区则为减. 地球的轨道并非正圆,在加上自转速度逐年递减, ...
- Socket网络编程(案例)
Socket:套接字 java.net包 1.流式套接字:基于TCP协议的Socket网络编程 工作方式: 1.客户端A连接到服务器: 2.服务器建立连接并把客户端A添加到列表: 3.客户端B.C.. ...
- python科学计算库的numpy基础知识,完美抽象多维数组(原创)
#导入科学计算库 #起别名避免重名 import numpy as np #小技巧:从外往内看==从左往右看 从内往外看==从右往左看 #打印版本号 print(np.version.version) ...
- [Alpha阶段]第八次Scrum Meeting
Scrum Meeting博客目录 [Alpha阶段]第八次Scrum Meeting 基本信息 名称 时间 地点 时长 第八次Scrum Meeting 19/04/12 新主楼F座2楼 35min ...