JACKSON JSON 操作帮助类
一. 引入POM
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency> <dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version></version>
</dependency>
二.代码
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class JacksonUtil { private static final Logger log = LoggerFactory.getLogger(JacksonUtil.class); public static final ObjectMapper mapper = new ObjectMapper(); private JacksonUtil() {
throw new IllegalStateException("Utility class");
} /**
* 将对象序列化成JSON字符串
*
* @param obj
* @return
*/
public static String serializeObjectToJson(Object obj) {
try {
return mapper.writeValueAsString(obj);
} catch (Exception e) {
log.error("serialize object to json", e);
return null;
}
} /**
* 将对象序列化到文件
*
* @param obj
* 要序列化的对象
* @param file
* 要写入的文件
*/
public static void serializeObjectToFile(Object obj, File file) {
try {
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(file, obj);
} catch (Exception e) {
log.error("Serialize Object To Json", e);
}
} /**
* 从文件读取JSON
*
* @param file
* 来源文件
* @param clazz
* 反序列化成的类
* @return
*/
public static <T> T deserializeFormFile(File file, Class<T> clazz) {
try {
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(file, clazz);
} catch (Exception e) {
log.error("Deserialize Json Form File", e);
}
return null;
} /**
* 将JSON字符串反序列化成对象
*
* @param json
* 要反序列化JSON字符串
* @param typeReference
* 类型帮助类(带泛型类T为List,Map等泛型类)
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T deserializeJsonToObject(String json, TypeReference<T> typeReference) {
try {
return (T) mapper.readValue(json, typeReference);
} catch (Exception e) {
log.error("Deserialize Json to Object", e);
return null;
}
} /**
* 将JSON字符串反序列化成对象
*
* @param json
* 要反序列化JSON字符串
* @param clazz
* 普通对象类型
* @return
*/
public static <T> T deserializeJsonToObject(String json, Class<T> clazz) {
try {
return mapper.readValue(json, clazz);
} catch (Exception e) {
log.error("Deserialize Json to Object", e);
return null;
}
} /**
* 将JSON字符串反序列化成对象
*
* @param json
* 要反序列化JSON字符串
* @param javaType
* JavaType表示的对象
* @return
*/
public static Object deserializeJsonToObject(String json, JavaType javaType) {
try {
return mapper.readValue(json, javaType);
} catch (Exception e) {
log.error("Deserialize Json to Object", e);
return null;
}
} /**
* 获取List类型的JavaType对象
*
* @param clazz
* List内部对象类型
* @return
*/
public static <T> JavaType getListJavaType(Class<T> clazz) {
TypeFactory typeFactory = mapper.getTypeFactory();
return typeFactory.constructCollectionType(List.class, typeFactory.constructType(clazz));
} /**
* 将JSON字符串反序列化成List
*
* @param json
* JSON字符串
* @param clazz
* List内部类型
* @return
*/
public static <T> List<T> deserializeJsonToList(String json, Class<T> clazz) {
JavaType javaType = getListJavaType(clazz);
try {
return mapper.readValue(json, javaType);
} catch (Exception e) {
log.error("Deserialize Json to List", e);
return Collections.emptyList();
}
} /**
* 获取Map类型的JavaType对象
*
* @param clazzKey
* Map key Type
* @param clazzValue
* Map value Type
* @return Map类型的JavaType对象
*/
public static <K, V> JavaType getMapJavaType(Class<K> clazzKey, Class<V> clazzValue) {
TypeFactory typeFactory = mapper.getTypeFactory();
return typeFactory.constructMapType(Map.class, typeFactory.constructType(clazzKey),
typeFactory.constructType(clazzValue));
} /**
* 将JSON字符串反序列化成Map
*
* @param <K>
* @param <V>
* @param json
* JSON字符串
* @param clazzKey
* Map key Type
* @param clazzValue
* Map value Type
* @return Map<K,V>对象
*/
public static <K, V> Map<K, V> deserializeJsonToMap(String json, Class<K> clazzKey, Class<V> clazzValue) {
JavaType javaType = getMapJavaType(clazzKey, clazzValue);
try {
return mapper.readValue(json, javaType);
} catch (Exception e) {
log.error("Deserialize Json to Map", e);
return null;
}
} /**
* 将JSON字符串反序列化成List<Map>
*
* @param json
* JSON字符串
* @param clazzKey
* key Type
* @param clazzValue
* value Type
* @return
*/
public static <K, V> List<Map<K, V>> deserializeJsonToListMap(String json, Class<K> clazzKey, Class<V> clazzValue) {
JavaType mapType = getMapJavaType(clazzKey, clazzValue);
TypeFactory typeFactory = mapper.getTypeFactory();
JavaType javaType = typeFactory.constructCollectionType(List.class, mapType);
try {
return mapper.readValue(json, javaType);
} catch (Exception e) {
log.error("Deserialize Json to List<Map>", e);
return Collections.emptyList();
}
} /**
* 将 LinkedHashMap 转换为正常 JSON 字符串
*
* @param map
* @param charset
* @return
*/
public static String hashMapToJson(Map<?, ?> map, Charset charset) {
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.append("{"); StringBuilder sBuilder = new StringBuilder();
for (Iterator<?> it = map.entrySet().iterator(); it.hasNext();) {
Entry<?, ?> e = (Entry<?, ?>) it.next();
sBuilder.append("\"" + e.getKey() + "\"" + ":");
sBuilder.append("\"" + e.getValue() + "\"" + ",");
} String jsonString = sBuilder.substring(, sBuilder.lastIndexOf(",")); jsonBuilder.append(jsonString);
jsonBuilder.append("}"); byte[] body = jsonBuilder.toString().getBytes(charset);
return new String(body, charset); } /**
*
* @param jsonString
* @param classz
* Object[] obj = getJosnToArray(message, Obj.class);
* @return
*/
public static <T> Object[] getJosnToArray(String jsonString, Class<T> classz) {
// net.sf.jso
JSONArray array = JSONArray.fromObject(jsonString);
Object[] obj = new Object[array.size()];
for (int i = ; i < array.size(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
obj[i] = JSONObject.toBean(jsonObject, classz);
}
return obj;
} /**
*
* @param jsonString
* @return
*/
public static <T> List<T> getJosnToArray(String jsonString) {
ObjectMapper mapper = new ObjectMapper();
List<T> list = null;
try {
list = mapper.readValue(jsonString, new TypeReference<List<T>>() {});
} catch (IOException e) {
log.error("Deserialize Json to List", e);
}
return list;
} }
JACKSON JSON 操作帮助类的更多相关文章
- C#工具类:Json操作帮助类(转载)
原文转载自C#工具类:Json操作帮助类_IT技术小趣屋. Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来 ...
- 【转载】C#工具类:Json操作帮助类
Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON.数据 ...
- 公共的Json操作C#类
using System; using System.Data; using System.Text; using System.Collections.Generic; using System.R ...
- 【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用
四个主要操作类:JsonConverter .JsonHelper .JsonSplit .AjaxResult 一.JsonConverter: 自定义查询对象转换动态类.object动态类转换j ...
- ASP.NET2.0 Newtonsoft.Json 操作类分享
JSON 是现在比较流行的数据交互格式,NET3.0+有自带类处理JSON,2.0的话需要借助Newtonsoft.Json来完成,不然自己写的话,很麻烦. 网上搜索下载 Newtonsoft.Jso ...
- JWT(JSON Web Tokens)操作帮助类
载荷实体: /// <summary> /// JWT载荷实体 /// </summary> public sealed class JWTPlayloadInfo { /// ...
- Json操作(DynamicJson)
Json的简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...
- ASP.NET 里的 JSON操作
最近项目中需要用到 JSON操作,google了一下 找到了几个比较好的操作方法.... 一 .使用 mircosoft 提供的 .NET Framework 自带的 json操作方法 1. 使用Ja ...
- Newtonsoft.Json 操作 JSON 字符串
Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而使用Json的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSeriali ...
随机推荐
- Spark应用程序运行的日志存在哪里(转)
原文链接:Spark应用程序运行的日志存在哪里 在很多情况下,我们需要查看driver和executors在运行Spark应用程序时候产生的日志,这些日志对于我们调试和查找问题是很重要的. Spark ...
- 常用EDA工具环境变量配置
# EDA Toolsexport SYNOPSYS_HOME=/home/ProgramFiles/synopsysexport VCS_ARCH_OVERRIDE=linuxexport VCS_ ...
- ZeroClipboard及其原理介绍
系列教程地址:http://www.365mini.com/page/zeroclipboard-2_x-quick-start.htm ZeroClipboard 是国外大神开发的一个用于剪贴板复制 ...
- List、Set、Map、数组之间各种转换
刚学Java不久的时候,接到一个电面,然后问了一些java的知识,比如说Java的编码,Unicode等,但是最让我蛋疼的是怎么吗map转为set,那个时候对集合用的很少,对集合不是特别了解,map还 ...
- scala lambda 小括号与大括号
看akka源码的时候看到这样的一个用法: 作为接触scala两天半的我有些看不明白了.好一番搜索看到这样的答案: <scala雾中风景(2): 小括号与花括号> 下面的问题,表面上看是小括 ...
- SSIS实践入门2:批量包的调度和SQLServer代理作业配置
趁着上一篇文章的余温,我们继续研究一下SSIS中多个包如何调度,难道需要一个包一个包的配置调度程序吗?显然不是的,接下来我们就说一说在SSIS应用中如何批量的调度所有的作业,本文只讲述一个基本的逻辑过 ...
- Python - 带参数的方法
import math class Point: def move(self, x, y): self.x = x self.y = y def reset(self): self.move(0, 0 ...
- 让Android App启动更协调
不知道大伙有没有发现,应用第一次启动的时候一般比较慢(低配置手机尤其如此),黑屏好一段时间,下面是我在模拟器中启动QQ的截图,黑屏差不多有5秒左右,如下图所示~ 显然这种结果很糟 ...
- 微信小程序 - 五星评分(含半分)
转载自:http://blog.csdn.net/column/details/13721.html 演示: 下载:小程序-星级评论.zip
- linux系统中的DNS服务器介绍
http://lq2419.blog.51cto.com/1365130/1172269 DNS:Domain Name Service,linux上的DNS服务是基于一种软件BIND实现的.BIND ...