当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » Java  » 常用工具方法
分享到: 
收藏 +0
2
/**
 * Json与javaBean之间的转换工具类
 *
 * @author 晚风工作室 www.soservers.com
 * @version 20111221
 *
 * {@code 现使用json-lib组件实现
 *    需要
 *     json-lib-2.4-jdk15.jar
 *     ezmorph-1.0.6.jar
 *     commons-collections-3.1.jar
 *     commons-lang-2.0.jar
 *    支持
 * }
 */

代码片段(5) [全屏查看所有代码]

1. [代码]Json与javaBean之间的转换工具类     跳至 [1] [全屏预览]

import java.lang.reflect.Field;
import java.util.ArrayList;
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;

/**
 * Json与javaBean之间的转换工具类
 * 
 * @author 晚风工作室 www.soservers.com
 * @version 20111221
 * 
 * {@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  
	 * @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);   
//
	            jsonConfig.setIgnoreDefaultExcludes(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 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;
		
	}

}

2. [文件] json-lib-2.1.jar ~ 122KB     下载(756)     [全屏预览]

3. [文件] ezmorph-1.0.6.jar ~ 84KB     下载(645)     [全屏预览]

4. [文件] commons-collections-3.2.jar ~ 558KB     下载(654)     [全屏预览]

5. [文件] commons-lang-2.5.jar ~ 273KB     下载(636)     [全屏预览]



开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(14)

  • 1楼:天天天 发表于 2013-01-23 06:55 回复此评论
    换用别的组件吧
  • 2楼:车开源 发表于 2013-01-23 11:11 回复此评论
    学习下,还有更好的方法吗?
  • 3楼:晚风工作室 发表于 2013-01-23 11:16 回复此评论
    好与不好都是相对来讲,如果这个东西已经能够满足你的需求,很显然是肯定的。我只是把平常常用的封装了下 更符合项目而已 欢迎大大们指点
  • 4楼:老北 发表于 2013-01-23 11:39 回复此评论
    hibernate的实体类 好像转换有问题?如何解决?
  • 5楼:晚风工作室 发表于 2013-01-23 11:43 回复此评论
    这。。。实体类没有关联关系的话是可以处理的,但关联关系转换的时候确实会不支持,json格式数据也没那么强,所以就是那种简单的json处理
  • 6楼:帝国战士 发表于 2013-01-23 17:25 回复此评论
    直接用gson 就可以了 哪有这么复杂啊
  • 7楼:晚风工作室 发表于 2013-01-23 21:00 回复此评论
    封装 与第三方jar包隔离   仁者见仁智者见智 呵呵
  • 8楼:voishion 发表于 2013-01-28 20:06 回复此评论

    使用Fastjson速度不是一般的快

  • 9楼:朱念 发表于 2013-07-06 16:59 回复此评论
    net.sf.json.JSONException: 'object' is an array. Use JSONArray instead
  • 10楼:朱念 发表于 2013-07-06 17:01 回复此评论
    将bean对象放在list里,调用beanListToJson这个方法,报异常
    net.sf.json.JSONException: 'object' is an array. Use JSONArray instead
    	net.sf.json.JSONObject.fromObject(JSONObject.java:180)
    	net.sf.json.JSONObject.fromObject(JSONObject.java:145)
    	com.zhunian.util.JsonHelper.beanToJson(JsonHelper.java:49)
    	com.zhunian.util.JsonHelper.beanListToJson(JsonHelper.java:106)
    	com.zhunian.action.PatientAction.list(PatientAction.java:52)
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	java.lang.reflect.Method.invoke(Method.java:597)
  • 11楼:JianXinTan 发表于 2014-09-03 23:07 回复此评论
    beanToJson(Object bean, String[] _nory_changes,booleannory) 的具体是用来做什么的,没弄懂,求指点指点哈,最好有实例啥的
  • 12楼:fengzi86 发表于 2015-04-25 15:23 回复此评论
    在线json格式化校验 json转换到javabean类 www.json123.com
  • 13楼:小薇 发表于 2015-10-07 16:49 回复此评论
  • 14楼:逐雅斋 发表于 2015-12-11 08:44 回复此评论