最近在学Java的反射这部分的知识,想到可以利用反射原理将javabean转换成json格式,于是动手写了下,完整的代码如下:

package com.kl.json;

import java.util.List;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Bean2Json {
	/**
	 * 将Bean转换成Json字符串
	 * 
	 * @param bean
	 * @return
	 */
	public static String bean2Json(Object bean) {
		StringBuilder stringBuilder = new StringBuilder("{");

		Field[] fields = bean.getClass().getDeclaredFields();
		for (int i = 0; i < fields.length; i++) {
			// 添加属性名
			stringBuilder.append("\"" + fields[i].getName() + "\":");
			if (i == fields.length - 1) {
				// 最后一个属性不要加逗号
				stringBuilder.append("\""
						+ getFieldValueByName(fields[i].getName(), bean)
								.toString() + "\"");
			} else {
				stringBuilder.append("\""
						+ getFieldValueByName(fields[i].getName(), bean)
								.toString() + "\",");
			}
		}
		stringBuilder.append("}");
		return stringBuilder.toString();
	}

	/**
	 * 将多个bean转换成json数组字符串
	 * 
	 * @param <T>
	 * 
	 * @param list
	 *            装有bean的集合
	 * @return json数组字符串
	 */
	public static <T> String Beans2JsonArray(List<T> list) {
		StringBuilder stringBuilder = new StringBuilder("[");
		for (int i = 0; i < list.size(); i++) {
			stringBuilder.append(bean2Json(list.get(i)));
			if (i != list.size() - 1) {
				stringBuilder.append(",");
			}
		}
		stringBuilder.append("]");
		return stringBuilder.toString();
	}

	/**
	 * 根据属性名获取属性值
	 * 
	 * @param fieldName
	 *            属性名
	 * @param bean
	 *            要解析的bean
	 * @return 返回的属性值
	 */
	private static Object getFieldValueByName(String fieldName, Object bean) {
		try {
			String firstLetter = fieldName.substring(0, 1).toUpperCase();
			String getter = "get" + firstLetter + fieldName.substring(1);
			Method method = bean.getClass().getMethod(getter, new Class[] {});
			Object value = method.invoke(bean, new Object[] {});
			return value;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}
这里面主要是对java.lang.reflect.Field和java.lang.reflect.Method这两个类的使用。