最近在学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这两个类的使用。