JsonPluginsUtil
package utils;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
import net.sf.json.util.CycleDetectionStrategy;
/**
* Json与javaBean之间的转换工具类 {@code 现使用json-lib组件实现
* 需要
* json-lib-2.4-jdk15.jar
* ezmorph-1.0.6.jar
* commons-collections-3.1.jar
* commons-lang-2.0.jar
* 支持
* }
*/
public class JsonPluginsUtil {
/**
* 从一个JSON 对象字符格式中得到一个java对象
*
* @param jsonString
* @param beanCalss
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T jsonToBean(String jsonString, Class<T> beanCalss) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
T bean = (T) JSONObject.toBean(jsonObject, beanCalss);
return bean;
}
/**
* 将java对象转换成json字符串
*
* @param bean
* @return
*/
public static String beanToJson(Object bean) {
JSONObject json = JSONObject.fromObject(bean);
return json.toString();
}
/**
* 将java对象转换成json字符串
*
* @param bean
* _nory_changes 表示不需要传化的属性,如果第三个参数nory为false,则表示排除第二个参数的转换
* @return
*/
public static String beanToJson(Object bean, String[] _nory_changes,
boolean nory) {
JSONObject json = null;
if (nory) {// 转换_nory_changes里的属性
Field[] fields = bean.getClass().getDeclaredFields();
String str = "";
for (Field field : fields) {
// System.out.println(field.getName());
str += (":" + field.getName());
}
fields = bean.getClass().getSuperclass().getDeclaredFields();
for (Field field : fields) {
// System.out.println(field.getName());
str += (":" + field.getName());
}
str += ":";
for (String s : _nory_changes) {
str = str.replace(":" + s + ":", ":");
}
json = JSONObject.fromObject(bean, configJson(str.split(":")));
} else {// 转换除了_nory_changes里的属性
json = JSONObject.fromObject(bean, configJson(_nory_changes));
}
return json.toString();
}
private static JsonConfig configJson(String[] excludes) {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(excludes);
// 去掉setIgnoreDefaultExcludes(true)的话,就只会输出name,不会输出class
jsonConfig.setIgnoreDefaultExcludes(false); // //默认为false
//
// jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
// jsonConfig.registerJsonValueProcessor(Date.class,
//
// new DateJsonValueProcessor(datePattern));
return jsonConfig;
}
/**
* 将java对象List集合转换成json字符串
*
* @param beans
* @return
*/
@SuppressWarnings("unchecked")
public static String beanListToJson(List beans) {
StringBuffer rest = new StringBuffer();
rest.append("[");
int size = beans.size();
for (int i = 0; i < size; i++) {
rest.append(beanToJson(beans.get(i)) + ((i < size - 1) ? "," : ""));
}
rest.append("]");
return rest.toString();
}
/**
*
* @param beans
* @param _no_changes
* @return
*/
@SuppressWarnings("unchecked")
public static String beanListToJson(List beans, String[] _nory_changes,
boolean nory) {
StringBuffer rest = new StringBuffer();
rest.append("[");
int size = beans.size();
for (int i = 0; i < size; i++) {
try {
rest.append(beanToJson(beans.get(i), _nory_changes, nory));
if (i < size - 1) {
rest.append(",");
}
} catch (Exception e) {
e.printStackTrace();
}
}
rest.append("]");
return rest.toString();
}
/**
* 从json字符串,获得HashMap数据 从json HASH表达式中获取一个map,改map支持嵌套功能
*
* @param jsonString
* @return
*/
@SuppressWarnings({ "unchecked" })
public static Map jsonToMap(String jsonString) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
Iterator keyIter = jsonObject.keys();
String key;
Object value;
Map valueMap = new HashMap();
while (keyIter.hasNext()) {
key = (String) keyIter.next();
value = jsonObject.get(key).toString();
valueMap.put(key, value);
}
return valueMap;
}
/**
* map集合转换成json格式数据
*
* @param map
* @return
*/
public static String mapToJson(Map<String, ?> map, String[] _nory_changes,
boolean nory) {
String s_json = "{";
Set<String> key = map.keySet();
for (Iterator<?> it = key.iterator(); it.hasNext();) {
String s = (String) it.next();
if (map.get(s) == null) {
} else if (map.get(s) instanceof List<?>) {
s_json += (s + ":" + JsonPluginsUtil.beanListToJson(
(List<?>) map.get(s), _nory_changes, nory));
} else {
JSONObject json = JSONObject.fromObject(map);
s_json += (s + ":" + json.toString());
}
if (it.hasNext()) {
s_json += ",";
}
}
s_json += "}";
return s_json;
}
/**
* 从json数组中得到相应java数组
*
* @param jsonString
* @return
*/
public static Object[] jsonToObjectArray(String jsonString) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
return jsonArray.toArray();
}
public static String listToJson(List<?> list) {
JSONArray jsonArray = JSONArray.fromObject(list);
return jsonArray.toString();
}
/**
* 从json对象集合表达式中得到一个java对象列表
*
* @param jsonString
* @param beanClass
* @return
*/
@SuppressWarnings("unchecked")
public static <T> List<T> jsonToBeanList(String jsonString,
Class<T> beanClass) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
JSONObject jsonObject;
T bean;
int size = jsonArray.size();
List<T> list = new ArrayList<T>(size);
for (int i = 0; i < size; i++) {
jsonObject = jsonArray.getJSONObject(i);
bean = (T) JSONObject.toBean(jsonObject, beanClass);
list.add(bean);
}
return list;
}
/**
* 从json数组中解析出java字符串数组
*
* @param jsonString
* @return
*/
public static String[] jsonToStringArray(String jsonString) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
String[] stringArray = new String[jsonArray.size()];
int size = jsonArray.size();
for (int i = 0; i < size; i++) {
stringArray[i] = jsonArray.getString(i);
}
return stringArray;
}
/**
* 从json数组中解析出javaLong型对象数组
*
* @param jsonString
* @return
*/
public static Long[] jsonToLongArray(String jsonString) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
int size = jsonArray.size();
Long[] longArray = new Long[size];
for (int i = 0; i < size; i++) {
longArray[i] = jsonArray.getLong(i);
}
return longArray;
}
/**
* 从json数组中解析出java Integer型对象数组
*
* @param jsonString
* @return
*/
public static Integer[] jsonToIntegerArray(String jsonString) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
int size = jsonArray.size();
Integer[] integerArray = new Integer[size];
for (int i = 0; i < size; i++) {
integerArray[i] = jsonArray.getInt(i);
}
return integerArray;
}
/**
* 从json数组中解析出java Double型对象数组
*
* @param jsonString
* @return
*/
public static Double[] jsonToDoubleArray(String jsonString) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
int size = jsonArray.size();
Double[] doubleArray = new Double[size];
for (int i = 0; i < size; i++) {
doubleArray[i] = jsonArray.getDouble(i);
}
return doubleArray;
}
// ////////////////////////////////////////自定义工具类////////////////////////////////////////////////
/*
* @Test public void testBeanToJsonStr(){ User user = new
* User("chenrongdong",18,new Date(),null); String [] strs= {"name","user"};
* System.out.println(beanToJsonStr(user,strs,null)); }
*/
/**
* 将java对象转换成json字符串
*
* @param excludes
* 不需要转换的属性
* @param flag
* 是否排除指定的属性,默认为ture
*/
public static String beanToJsonStr(Object bean, String[] excludes,
Boolean flag) {
JSONArray obj = JSONArray.fromObject(bean, configJson(excludes, flag));
return obj.toString();
}
private static JsonConfig configJson(String[] excludes, Boolean flag) {
if (flag == null) {
flag = true;
}
JsonConfig config = new JsonConfig();
config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
private SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
public Object processArrayValue(Object value, JsonConfig config) {
return this.process(value);
}
public Object processObjectValue(String key, Object value, JsonConfig config) {
return this.process(value);
}
private Object process(Object val) {
if (val == null) {
return "";
} else if (val instanceof Date)
return sdf.format((Date) val);
else {
return val.toString();
}
}
});
if (flag) {
config.setExcludes(excludes);
}
// 去掉setIgnoreDefaultExcludes(true)的话,就只会输出name,不会输出class
config.setIgnoreDefaultExcludes(false); // 默认为false
// 当类在当前文件夹下时,要防止自循环,需要配置jsonConfig
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
return config;
}
}
JsonPluginsUtil的更多相关文章
- Json与javaBean之间的转换工具类
/** * Json与javaBean之间的转换工具类 * * {@code 现使用json-lib组件实现 * 需要 * json-lib-2.4-jdk15.jar * ...
- org.json和json-lib比较
经常会用到JSON格式才处理,尤其是在Http请求的时候,网上可以找到很多json处理的相关工具,如org.json和json-lib,下面两段源代码是分别使用这两个工具解析和构造JSON的演示程序. ...
- json转换方法
import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.ut ...
随机推荐
- Silverlight之我见——制作星星闪烁动画
圣诞节来了,无聊,做点东西纪念一下. 原理很简单,生成1000个圆,从随机数来布置它们的位置,通过动画来处理它们的透明度,动画时长也是随机生成. 1.创建图形数组并设置背景透明,渐变笔触,大小等,而后 ...
- MDK(KEIL5)如何生成.bin文件 【转】
最近要做个bin文件,网上找了好多都说的不够清楚,后来找到一篇实测可用,说明清楚的,转过来以便学习用. 参考传送门:https://blog.csdn.net/nx505j/article/detai ...
- 如何预防SQL注入,XSS漏洞(spring,java)
SQL注入简介 SQL注入是由于程序员对用户输入的参数没有做好校验,让不法分子钻了SQL的空子, 比如:我们一个登录界面,要求用户输入用户名和密码: 用户名: ' or 1=1-- 密码: 点击登录之 ...
- vs--bookmark用法
快捷键 Ctrl+K,K 增加/取消书签 Ctrl+K,P 导航到上一个书签 Ctrl+K,N 导航到下一个标签 Ctrl+K,L 取消所有书签
- ELK 聚合查询
在elasticsearch中es支持对存储文档进行复杂的统计.简称聚合. ES中的聚合被分为两大类. 1.Metrics, Metrics 是简单的对过滤出来的数据集进行avg,max等操作,是一个 ...
- FaceBook推出的Android图片载入库-Fresco
欢迎关注ndroid-tech-frontier开源项目,定期翻译国外Android优质的技术.开源库.软件架构设计.測试等文章 原文链接:Introducing Fresco: A new imag ...
- Android 四大组件学习之ContentProvider二
上节学习了什么是ContentProvider.以及ContentProvider的作用.以及什么是URL.本节就对上节学习的知识做一个实践,也就是定义自己的ContentProvider 好.实践是 ...
- Java-Maven:Maven清单
ylbtech-Java-Maven:Maven清单 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http ...
- Node.js:RESTful API
ylbtech-Node.js:RESTful API 1.返回顶部 1. Node.js RESTful API 什么是 REST? REST即表述性状态传递(英文:Representational ...
- 【转】Java的可变类与不可变类
1.可变类和不可变类(Mutable and Immutable Objects)的初步定义: 可变类:当你获得这个类的一个实例引用时,你可以改变这个实例的内容. 不可变类:当你获得这个类的一个实例引 ...