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 ...
随机推荐
- nrf51822, How to use a vendor specific UUID?
Using a vendor specific UUID is basically a two-step process: 1. Add your custom base UUID to the st ...
- iOS中 imageNamed方法 非常多图片占用大量内存问题
当我们须要载入非常多图片(相冊)的时候我们通常会用[UIimage imageNamed:imageName]; 实际上[UIimage imageNamed:imageName]这种方法在图片使 ...
- 更改Thunderbird的默认语言
使用的Thunderbird Poratable版本是英文的,可以用以下方式修改为中文界面: 1.下载中文语言包 在官方网站的https://addons.mozilla.org/en-US/thun ...
- 探寻C++最快的读取文件的方案 ——C++ IO优化
在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式.相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据.还有人说Pascal的re ...
- IIS - 无后缀(无扩展名)的MIME类型配置
添加一个新的 MIME 类型即可. 文件扩展名:. MIME类型:application/octet-stream
- java学习笔记2--数据类型、数组
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note2.html,转载请注明源地址. 1.数据类型 Java数据类型有: 原始数据类型(Pr ...
- Android编译程序报错:Re-installation failed due to different application signatures.
如果机子上已经安装非本机编译的android程序,在编译的时候就会报错.方法首选的是删除原程序,然后再进行编译. 但是有一部分程序是烧录在系统程序里面的,无法直接删除,这时候可以使用adb shell ...
- STL - C++ 11的Lambda表达式(上)
Lambda始自C++ 11,是一种在表达式或语句内指定函数行为的定义式. 你可以定义函数行为作为对象,以inline实参的形式传给算法作为predicate(判断式). eg: std:transf ...
- Array.prototype.slice.call 和 slice以及call
单独的简单介绍,后续再补上一些资料. 对象转换为数组. /** * slice : 数组->slice(截取) * 参数有两个,开始截取和结束截取,并返回原数组: * a.slice(1) || ...
- 第十六周oj刷题——Problem I: 改错题:类中私有成员的訪问
Description 改错题: 设计一个日期类和时间类,并编写全局函数display用于显示日期和时间. 要求:display函数作为类外的普通函数,而不是成员函数 在主函数中调用display函数 ...