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的更多相关文章

  1. Json与javaBean之间的转换工具类

    /**  * Json与javaBean之间的转换工具类  *  * {@code 现使用json-lib组件实现  *    需要  *     json-lib-2.4-jdk15.jar  * ...

  2. org.json和json-lib比较

    经常会用到JSON格式才处理,尤其是在Http请求的时候,网上可以找到很多json处理的相关工具,如org.json和json-lib,下面两段源代码是分别使用这两个工具解析和构造JSON的演示程序. ...

  3. json转换方法

    import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.ut ...

随机推荐

  1. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)

    手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csdn.net/suncongbo/article/details/78819470 URL: (Lu ...

  2. mongodb--update高级用法

    配合update使用的函数 $set 修改某列的值 $unset 删除某个列 $rename 重命名某个列 $inc 增长某个列 $setOnInsert 当upsert为true时,并且发生了ins ...

  3. C#--Task知识点

    5天玩转C#并行和多线程编程 TASK使用总结 Task是什么,字面意思是任务 表示一个异步操作.它是异步操作的首选方式.Task是FRAMEWORK4中的新特性,封装了以前的Thread,并管理Th ...

  4. Spring MVC-Hello World示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_hello_world_example.htm 说明:示例基于Spring MVC ...

  5. [Angular] Freshness Caching Policy - Network First, Cache Last

    In some cases, you want to get fresh data instead of cache data to the screen, such as stock applica ...

  6. fastjson null 值处理

    偶然用到fastjson转换json 在前台用js解析竟然某些字段没有,曾经用过gson.联想到是不是相似gson默认将null值不显示了,找了下资料果真如此 直接上代码吧 import java.u ...

  7. 报错configure:error: no acceptable C compiler found in $PATH。。

    报错configure:error: no acceptable C compiler found in $PATH.. 查看日志: 出错原因:新安装的linux系统,没有gcc库 解决方案:使用yu ...

  8. Thinking in Java:容器深入研究

    1.虚线框表示Abstract类,图中大量的类的名字都是以Abstract开头的,它们仅仅是部分实现了特定接口的工具,因此创建时能够选择从Abstract继承. Collections中的实用方法:挑 ...

  9. javascript的==和===,以及if(xxx)总结

    转载请注明 本文出自:http://blog.csdn.net/nancle 首先说==和=== 首先说明一个非常特殊的值NaN, typeof(Nav)得到'number',可是NaN不等于不论什么 ...

  10. 《Head First 设计模式》学习笔记——复合模式

    模型-视图-控制器(MVC模式)是一种很经典的软件架构模式.在UI框架和UI设计思路中扮演着很重要的角色.从设计模式的角度来看,MVC模式是一种复合模式.它将多个设计模式在一种解决方式中结合起来,用来 ...