简单的JavaBean转JSON方法

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式!在javascript中,经常用于前台与后台的数据交互。在实际的工作中,我们经常需要把后台的JavaBean转换成JSON然后传给前台,网上有很多成熟的转换工具,其实我们自己也可以动手写一个,代码很简单!

package com.test.json;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class Json {
	/**
	 * 对象生成json
	 * @param object
	 * @return
	 */
	public static String objectToJson(Object object){
		StringBuffer sb = new StringBuffer();
		if(object != null){
			String className = object.getClass().getSimpleName();
			sb.append("{\"");
			sb.append(className);
			sb.append("\"");
			sb.append(":[");
			generateJson(generateMethodList(object),object,sb);
			sb.append("]}");
		}
		return sb.toString();
	}
	/**
	 * list 生成json
	 * @param list
	 * @return
	 */
	public static String ListToJson(List<? extends Object> list){
		StringBuffer sb = new StringBuffer();
		int index = 0;
		if(list.size() > 0){
			Object firstObject = list.get(0);
			String className = firstObject.getClass().getSimpleName();
			sb.append("{\"");
			sb.append(className);
			sb.append("\"");
			sb.append(":[");			
			for(Object object  : list ){
				generateJson(generateMethodList(object),object,sb);
				if(!(index++ == list.size() -1)){
					sb.append(",");
				}
			}
			sb.append("]}");
		}
		return sb.toString();
	}
	/**
	 * set生成Json
	 * @param set
	 * @return
	 */
	public static String setToJson(Set<? extends Object> set){
		if(set.size() > 0){
			List<Object> list = new ArrayList<Object>();
			list.addAll(set);
			return Json.ListToJson(list);
		}else{
			return null;
		}
	}
	/**
	 * 生成json
	 * @param methodList
	 * @param object
	 * @param sb
	 */
	private static void generateJson( List<Method> methodList,Object object,StringBuffer sb){
		int index = 0;
		for(Method method : methodList){
			String methodName = method.getName();
			methodName = methodName.replace("get", "").toLowerCase();
			try {
				//执行get方法,取得值
				String methodValue = method.invoke(object, null).toString();
				sb.append("{\"");
				sb.append(methodName);
				sb.append("\":\"");
				sb.append(methodValue);
				sb.append("\"}");
				if(!(index++ == methodList.size() - 1)){
					sb.append(",");
				}
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}				
		}
	}
	/**
	 * 取得所有以get开头的方法,不包括getClass方法
	 * @param object
	 */
	private static List<Method>  generateMethodList(Object object){
		List<Method> methodList = new ArrayList<Method>();
		Method[] methods = object.getClass().getMethods();
		for(Method method : methods ){
			String methodName = method.getName();
			if(methodName.startsWith("get") && !methodName.endsWith("Class")){
				methodList.add(method);
			}
		}		
		return methodList;
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值